This is an unofficial snapshot of the ISO/IEC JTC1 SC22 WG21 Core Issues List revision 116a. See http://www.open-std.org/jtc1/sc22/wg21/ for the official list.
2024-12-19
[Accepted as a DR at the November, 2024 meeting.]
constexpr placement new requires (just) pointer-interconvertibility for the argument pointer, whereas static_cast from void* to T* requires similarity. Requiring pointer-interconvertibility would not allow to differentiate two members of some union of the same type; such differentiation is required diagnose access to inactive union members.
Proposed resolution (approved by CWG 2024-08-16):
Change in 7.7 [expr.const] bullet 5.18.2 as follows:
- the selected allocation function is a non-allocating form (17.6.3.4 [new.delete.placement]) with an allocated type T, where
- the placement argument to the new-expression points to an object
that is pointer-interconvertible with an object ofwhose type is similar to T (7.3.6 [conv.qual]) or, if T is an array type,withto the first element of an object of a type similar to T, and- the placement argument points to storage whose duration began within the evaluation of E;
CWG 2024-11-19
The proposed resolution does not address the ambiguity with different union members of the same type, but is a good fix to increase consistency with static_cast regardless.