https://gcc.gnu.org/bugzilla/show_bug.cgi?id=65520
Bug ID: 65520 Summary: elaborated-type-specifiers and inaccessible injected-class-names Product: gcc Version: 5.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: c++ Assignee: unassigned at gcc dot gnu.org Reporter: rs2740 at gmail dot com Repro: struct A {}; struct B : private A {}; struct C : public B { struct A m_a; // error: A is the inaccessible injected-class-name }; Per [basic.lookup.elab]/p2, the elaborated-type-specifier `struct A` should cause an unqualified name lookup for `A`, and per [basic.lookup.unqual]/p7 the name is first searched in C and its base classes, which should find the inaccessible injected-class-name, rendering the code ill-formed. Instead, GCC accepts this code. It is rejected by all versions of Clang I tested (3.0 and later).