https://gcc.gnu.org/bugzilla/show_bug.cgi?id=95977
Paul Keir <pkeir at outlook dot com> changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |pkeir at outlook dot com --- Comment #2 from Paul Keir <pkeir at outlook dot com> --- I've also encountered this bug. I changed your code to: struct X { int* x{new int{42}}; constexpr ~X() { delete x; } }; int main(int argc, char *argv[]) { static_assert(42 == *X{}.x); return 0; } ...and now an extra note appears at compilation: note: ‘<anonymous>’ was not declared ‘constexpr’ 15 | static_assert(42 == *X{}.x); | ^ This made me think of the implicitly-defined default constructor for X, which should be `constexpr`. But perhaps attribution of this `constexpr` qualifier is failing due to the memory not having been freed at the point where the equality is evaluated? This is certainly unintuitive, but I do note that the error disappears when `static_assert(doit())` is used instead, with the following definition: constexpr bool doit() { int i = *X{}.x; return i==42; } ...but while that perhaps make sense, I encountered two other changes to the version above which surprisingly also remove the error: 1) Adding an explicitly defaulted constructor for X; 2) Using `X()` rather than `X{}` in the static assert.