>> msg *p = reinterpret_cast<msg*>(get_bytes()); > > Why are you doing this? For efficiency, by preventing a copy (imagine get_bytes() is getting bytes out of a socket buffer). Putting alignment/padding concerns aside, it would be nice if there was a way to explicitly tell the compiler, I want to do this and, please don’t reorder stores and loads, or perform other strict-aliasing optimizations, on the memory pointed to by this pointer (similar to the effect of a memcpy). I believe the only way to do this is with the GCC may_alias attribute, or a more heavy-handed memory clobber. I think the OP wanted to ask the GCC folks if there was another, possibly more portable, way; for example, placement new, but that turned out not to be an option. Another related, maybe more important, question is if GCC sees a reinterpet_cast like this (without a may_alias type), is it free to discard code or otherwise drastically change it due to the fact that it’s undefined by the standard? Like some of the cases shown in: “any undefined behavior in C gives license to the implementation (the compiler and runtime) to produce code that ... does completely unexpected things, or worse” http://blog.llvm.org/2011/05/what-every-c-programmer-should-know.html Jay Haynberg