https://gcc.gnu.org/bugzilla/show_bug.cgi?id=87518
--- Comment #3 from Jonathan Wakely <redi at gcc dot gnu.org> --- Also see [dcl.typedef] paragraphs 3 and 4 in the standard, which has an example very similar to this: struct S { typedef struct A { } A; // OK typedef struct B B; // OK typedef A A; // error };