This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[Bug c++/65520] New: elaborated-type-specifiers and inaccessible injected-class-names
- From: "rs2740 at gmail dot com" <gcc-bugzilla at gcc dot gnu dot org>
- To: gcc-bugs at gcc dot gnu dot org
- Date: Mon, 23 Mar 2015 03:01:21 +0000
- Subject: [Bug c++/65520] New: elaborated-type-specifiers and inaccessible injected-class-names
- Auto-submitted: auto-generated
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).