【发布时间】:2015-07-12 09:56:58
【问题描述】:
如 ISO C++ 2003 中所述
§11.8 嵌套类 [class.access.nest]
嵌套类的成员对 封闭类,也不是已授予的类或函数 与封闭班级的友谊;通常的访问规则(第 11 条) 应服从。封闭类的成员没有特殊的 访问嵌套类的成员;通常的访问规则(条款 11) 应遵守。
[示例:
class E { int x; class B { }; class I { B b; // error: E::B is private ERROR 1 int y; void f(E* p, int i) { p->x = i; // error: E::x is private ERROR 2 } }; int g(I* p) { //return p->y; // error: I::y is private ERROR 3 } }; int main() {}——结束示例]
所以我认为clang 和g++ 是错误的,因为他们成功编译了这段代码。
还是我理解错了?
【问题讨论】:
标签: c++ language-lawyer nested-class c++03