https://gcc.gnu.org/bugzilla/show_bug.cgi?id=93666
--- Comment #3 from Andrew Pinski <pinskia at gcc dot gnu.org> --- The source: struct A { int i{1}, j{2}; A(int i_, int j_) : i(i_), j(j_) {} }; A a{3,4}; struct B { int i{1}, j{2}; constexpr B(int i_, int j_) : i(i_), j(j_) {} }; B b{3,4}; ---- CUT ---- There is a big difference between B and A. OPtimization has nothing to do with it. C++ says a has a dynamic constructor while b is required to be done statically. So GCC does not currently implement dynamic to static constructor optimization while clang does. There is another bug report which talks about the same.