https://gcc.gnu.org/bugzilla/show_bug.cgi?id=109770
--- Comment #8 from m.cencora at gmail dot com --- (In reply to Richard Biener from comment #7) > > Ah, interesting. I was looking for an answer whether > > new T > > may produce anything other than an object with dynamic type T or if there > are any constraints on the object constructed. In particular C++20 11.10.4 > refered to by 6.7.3 doesn't mention whether re-using the storage is > permitted for an object under construction. It says usage is limited > and doesn't explicitely allow re-use so that might mean re-use is not > allowed. > > Note std::launder is C++17 only, the original reporter was using C++98 / > C++14 > > Reading C++20, 6.7.3/9, at least suggests that the placement new (this) A > in the CTOR invokes undefined behavior because the lifetime of B hasn't > ended (but 6.7.3/1.5 makes this ambiguous - we're re-using the storage here, > and also we're not talking about an object with automatic storage duration). 6.7.3/9 doesn't apply to your example - this is not an automatic storage duration. If 11.10.4 is suppose to be an exhaustive allow-list, then yeah ending the complete object lifetime during its construction is UB, but I guess it would be best to get a response from real C++ expert or file a C++ core issue.