https://gcc.gnu.org/bugzilla/show_bug.cgi?id=106613
--- Comment #2 from Jason Liam <jlame646 at gmail dot com> --- (In reply to Andrew Pinski from comment #1) > clang rejects it with the same error message. > > Both GCC and clang are correct because the inner types are not complete > until after the outer type is complete. I don't think what you said about " inner types are not complete until after the outer type is complete" is true. In particular, the following program is well-formed. Note in the below program the nested type named `A` is complete when its `};` is encountered and not when the containing class `C`'s `};` is encountered as opposed to your claim. ``` struct C { struct A { }; static constexpr A a{}; //this is fine because A is complete here as opposed to Andrew's claim }; ```