https://gcc.gnu.org/bugzilla/show_bug.cgi?id=120554
Jakub Jelinek <jakub at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |jakub at gcc dot gnu.org, | |redi at gcc dot gnu.org --- Comment #6 from Jakub Jelinek <jakub at gcc dot gnu.org> --- This boils down to struct S { unsigned int s; S () : s (0) {} constexpr S &operator= (const S &) = default; }; i.e. when the default ctor is not constexpr, but defaulted assignment operator is constexpr. I have no idea which compiler is right here, though admittedly what libgcobol does makes no sense to me, if no constructor is marked constexpr, one can't construct objects of such type during constant expression evaluation and so it is either wrong or just useless to mark the copy assignment operator constexpr. Note, adding any other constexpr ctor to the structure makes it accepted by clang, e.g. constexpr S (int, int, int) : s (42) {}