https://gcc.gnu.org/bugzilla/show_bug.cgi?id=121068
--- Comment #14 from Tomasz KamiĆski <tkaminsk at gcc dot gnu.org> --- Not sure if this is expected, so noting this here. On trunk (with r16-2432-gfdbc5ff61b471076cc9c758fb6c30d62f7ef1c56), if I value initialize the array (like in inplace_vector), then the code works: union { S a[20]; }; new (&a) S[20](); // OK for (int i = 0; i < 20; ++i) a[i].~S(); auto* sf = ::new(&a[2]) S(11); See also: https://gcc.gnu.org/pipermail/libstdc++/2025-July/062752.html But after changing the placement new to perform default initialization `new (&a) S`, the above code no longer works. This is not a blocker on any library feature.