https://gcc.gnu.org/bugzilla/show_bug.cgi?id=121068
--- Comment #16 from Tomasz KamiĆski <tkaminsk at gcc dot gnu.org> --- Ah sorry, I was sure I posted the function before: ``` #include <new> struct S { constexpr S() = default; constexpr S(int x) : s(x) {} constexpr S(S&& x) : s(x.s) {} constexpr S& operator=(S&& x) { s = x.s; return *this; } unsigned char s; }; constexpr int foo() { 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); return 1; } static_assert(foo()); constexpr int foo2() { union { S a[20]; }; new (&a) S[20]; // ILL-FORMED for (int i = 0; i < 20; ++i) a[i].~S(); auto* sf = ::new(&a[2]) S(11); return 1; } static_assert(foo2()); ``` https://godbolt.org/z/cKbEsdzEh