https://gcc.gnu.org/bugzilla/show_bug.cgi?id=97890
Andrew Pinski <pinskia at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Resolution|--- |INVALID Status|UNCONFIRMED |RESOLVED --- Comment #6 from Andrew Pinski <pinskia at gcc dot gnu.org> --- So the reasoning is take: struct S; extern void g( struct S); struct S // abstract { int b; virtual void f() = 0; }; With the previous wording, that would also be invalid but was it? ICC and clang accept it too. So the idea is to make the above still valid but also allow where g is after the definition of the struct. it would be invalid to use g with that argument anwayws in the definition rather than declaration.