David Abrahams <[EMAIL PROTECTED]> writes: | "Eric Woodruff" <[EMAIL PROTECTED]> writes: | | > "David B. Held" <[EMAIL PROTECTED]> wrote in message | > aslftb$cr2$[EMAIL PROTECTED]">news:aslftb$cr2$[EMAIL PROTECTED]... | >> "Eric Woodruff" <[EMAIL PROTECTED]> wrote in message | >> aslbsn$nt3$[EMAIL PROTECTED]">news:aslbsn$nt3$[EMAIL PROTECTED]... | >> > [snip] | >> > | >> > > holder<Foo> h; | >> > > new (h.storage) Foo; | >> > | >> > What is the meaning of that syntax? | >> | >> This is placement new syntax. It means construct a Foo at the address | >> h.storage, without allocating any memory. | >> | > | > So the type really is of Foo, which has to mean that casting h.storage back | > to a Foo* using reinterpret_cast is covered by the standard. | | No, the standard only guarantees that you can do a round-trip | cast. The pointer didn't start out as a Foo*. The fact that it has the | same address as a Foo* doesn't mean anything. Just for example, | something like the following is a perverse but legal reinterpret_cast | implementation: | | if is_pointer<source_type> and is_pointer<dest_type> | return (dest_type)( | (unisgned)src | ^ sizeof(remove_pointer<source_type>::type) | ^ sizeof(remove_pointer<dest_type>::type));
And why isn't that applicable to the trip char* -> void* -> Foo* ? -- Gaby _______________________________________________ Unsubscribe & other changes: http://lists.boost.org/mailman/listinfo.cgi/boost