下面是纯粹学术发明的类层次结构。预期的行为是什么?
struct X{
void f1();
void f2();
void f3();
};
struct Y : private X{
void f4();
};
struct Z : X{
};
struct D : Y, Z{
using X::f2;
using Z::X::f3;
};
int main(){}
我预期使用声明X :: F2不明确为 'X' 是 'd'(visbility VS X的可接近)的一个不明确的基础。然而g ++(ideone.com)很好地编译它。
我使用Online Comeau进行了检查,发现X :: f2的声明出现错误。但是,它也为Z :: X :: f3使用声明提供了不明确的地方。
那么预期的行为是什么?
编辑1:
到标准的相应部分的引用将是有益的,请。
编辑2:
我与2010年VS检查,它只有与使用声明X :: F2异议。然而,这不是关于'X'的歧义(例如gcc和Comeau)。这是关于“错误C2876:'X':并非所有重载都可访问”。
编辑3:
struct X{
void f(){}
};
struct Y : X{
struct trouble{
void f(){}
};
};
struct trouble : X{
};
struct letscheck : Y, trouble{
using trouble::f;
};
int main(){}
在这里,我试图(故意)与使用声明类型创建一个问题。海湾合作委员会仍然编译这个罚款,VS2010也是如此。 Comeau仍然给出了错误(如预期的)关于模棱两可的类型'麻烦'。按照初步查询的解释,看来GCC和VS2010是错误的。那是对的吗?
在D添加一个方法,调用f2()看看会发生什么。 – 2010-08-23 15:00:18