chu*_*ck1 10 c++ gcc multiple-inheritance language-lawyer compiler-bug
class A {
public:
int a;
};
class B: private A {
};
class C: public A {
};
class D: public B, public C {
D() {
B::a = 0;
}
};
Run Code Online (Sandbox Code Playgroud)
即使B私有继承A,这也会编译.如果我删除D的继承,编译器会说a是无法访问的,就像我期望的那样.那么C的继承会让我的编译器感到困惑吗?
编译器是gcc 4.4.7
看起来像一个真正的编译器错误,因为标准不允许在
11.2 基类和基类成员的可访问性
在寻找标准本身之外的证据时,WhozCraig 已经提出 clang 不允许此类访问。
寻找在 gcc 中可能会混淆的类似模式,虚拟基类 A 存在钻石继承,这将允许此类访问,因为大多数访问的路径决定了应用哪些保护。
| 归档时间: |
|
| 查看次数: |
193 次 |
| 最近记录: |