https://gcc.gnu.org/bugzilla/show_bug.cgi?id=70820
--- Comment #4 from Jonathan Wakely <redi at gcc dot gnu.org> --- (In reply to Fabio Rocha from comment #3) > Still, it feels pretty strange that uncommenting the "First Assert" is what > makes the code incorrect... That's not strange at all, the assertion requires the value of the static data member, so it causes it to be instantiated, while the type is incomplete. Without that assertion the static data member is not instantiated until the definition of ::k, after the types are complete.