【发布时间】:2012-10-02 19:36:11
【问题描述】:
我的代码将子类模板声明为私有,然后将成员声明为受保护:
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, the newest GCC correctly rejects the code。 -
我的意思是让 Z::f 公开。我会解决这个问题。
-
Y<T>::somethingToDo真的是私有的吗? -
SomeType似乎未定义。你能发布一个完整的、最小的、实际程序来演示这个问题吗?见SSCCE.ORG。 -
FWIW,this program 使用 g++4.7 和 g++-4.5 编译。
标签: c++ standards standards-compliance