https://gcc.gnu.org/bugzilla/show_bug.cgi?id=95349
--- Comment #33 from Andrew Downing <andrew2085 at gmail dot com> --- Those are all perfectly good arguments, but the problem ended up not having anything to do with std::launder or new implicit object creation rules or anything else introduced in the most recent standards right? This should be well defined in c++11 and on https://godbolt.org/z/w5FoZN. It compiles correctly until gcc 5.1, and in all versions of the other major compilers I've tried that will actually compile on godbolt.org. As far as I can tell, it should also be well defined in c++98 and on if you use different types and check the size and alignment some other way.