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.

Reply via email to