https://gcc.gnu.org/bugzilla/show_bug.cgi?id=96994
--- Comment #3 from Jakub Jelinek <jakub at gcc dot gnu.org> --- Though: struct A { consteval A (int x) { i = x; } int i = 0; }; struct B { constexpr B (int x) { i = x; } int i = 0; }; A const a = 1; constexpr A b = 2; B const c = 3; A constinit d = 4; static_assert (b.i == 2); int main() { if (a.i != 1 || c.i != 3 || d.i != 4) __builtin_abort (); } works fine, so the problem is maybe just with default construction for consteval ctor.