https://gcc.gnu.org/bugzilla/show_bug.cgi?id=99185
--- Comment #8 from m.cencora at gmail dot com --- It does not matter whether A constructor is default or empty. If class instance cannot be constant-initialized then dynamic initialization will take place. I think gcc just incorrectly performs constant initialization in these scenarios. clang reports error as expected: struct A { int value; }; struct B { int value; B() = default; }; constinit A a; constinit B b;