In message <20050610094615.GC79474_at_ip.net.ua>, Ruslan Ermilov writes: >> struct t1 { int a; } x; >> struct t2 { int a; } y = { 42 }; >> x = y; >> >> The types `struct t1' and `struct t2' are not compatible and thus not >> assignable. See 6.2.7 and 6.5.16.1. >> >If you're to byte-copy say t1 to t2, is it guaranteed to work? That is, >do both types are guaranteed to have the same size and alignment of their >structure members? I'm pretty sure this is guaranteed, as lot of code >assumes this, for example, the sockaddr* structures. I do not belive that is guaranteed. (If it were the structs might as well have been made assignable). You need to make sure that the two definitions are covered by the exact same compilation conditions, and you can't tell if a compiler has an option along the lines of -fstruct_is_magic=t2 Which does weird things you don't know about. The fact that it mostly works (and that we rely on this) is a testament to the fact that compiler writers emply their destructive creativity elsewhere. -- Poul-Henning Kamp | UNIX since Zilog Zeus 3.20 phk_at_FreeBSD.ORG | TCP/IP since RFC 956 FreeBSD committer | BSD since 4.3-tahoe Never attribute to malice what can adequately be explained by incompetence.Received on Fri Jun 10 2005 - 07:49:55 UTC
This archive was generated by hypermail 2.4.0 : Wed May 19 2021 - 11:38:36 UTC