[Bug c++/60011] New: Compile error for legal exemplar from c++11 std [class.friend] 11.3.2
peter at hurleysoftware dot com
gcc-bugzilla@gcc.gnu.org
Fri Jan 31 16:37:00 GMT 2014
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=60011
Bug ID: 60011
Summary: Compile error for legal exemplar from c++11 std
[class.friend] 11.3.2
Product: gcc
Version: 4.8.2
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: c++
Assignee: unassigned at gcc dot gnu.org
Reporter: peter at hurleysoftware dot com
Created attachment 32003
--> http://gcc.gnu.org/bugzilla/attachment.cgi?id=32003&action=edit
testcase
g++ 4.8.2 fails to compile the legal example from c++11 std specification,
section 11.3.2 [class.friend]:
"Declaring a class to be a friend implies that the names of private and
protected members from the class granting friendship can be accessed in the
base-specifiers and member declarations of the befriended class.
[ Example:
class A {
class B { };
friend class X;
};
struct X : A::B { // OK: A::B accessible to friend
A::B mx; // OK: A::B accessible to member of friend
class Y {
A::B my; // OK: A::B accessible to nested member of friend
};
};
—end example ]"
Note specifically that the private nested class A::B is a valid base specifier
for the friend class X. However, g++ 4.8.2 issues the following error
diagnostic when A::B is used as the base specifier:
peter@thor:~/src/test/c++$ /opt/gcc-4.8.2/bin/g++ -c -std=c++11 nested.cpp
nested.cpp:3:8: error: ‘class A::B’ is private
class B {};
^
nested.cpp:7:15: error: within this context
struct X : A::B {
^
More information about the Gcc-bugs
mailing list