我有一段代码,声明了一个子类模板为私有的,然后声明了一个成员为受保护的:
class X {
private:
template <class T>
class Y {
public:
void somethingToDo();
// definition
};
protected:
Y<SomeType> _protectedMember;
// More definition
};
class Z : public virtual X{
public:
void f();
}
void Z::f() {
...
_protectedMember.somethingToDo();
}
最初我使用gcc 4.3.4编译这个程序,它成功了。然后我尝试在各种平台上使用GCC、IBM和Microsoft编译器构建,非GCC编译器都拒绝了它。现在看起来好像是(这个版本的)gcc不符合标准。但在得出任何结论之前,我想验证一下什么是技术上正确的。
谢谢。
Z::f
是public
,最新的GCC正确地拒绝了该代码。 - XeoY<T>::somethingToDo
真的意味着是私有的吗? - usta