"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)); ... -- David Abrahams [EMAIL PROTECTED] * http://www.boost-consulting.com Boost support, enhancements, training, and commercial distribution _______________________________________________ Unsubscribe & other changes: http://lists.boost.org/mailman/listinfo.cgi/boost