此代码适用于clang,但g ++说:
错误:'A :: A()'受保护
class A
{
protected:
A() {}
};
class B : public A
{
static A f() { return A(); } // GCC claims this is an error
};
哪种编译器是对的?
答案 0 :(得分:11)
g ++是对的。
C ++标准§11.5/ 1表示“< ...>访问必须通过指向派生类本身的指针,引用或对象< .. 。>”中。对于构造函数,这意味着只允许B
调用A
的受保护构造函数,以便构造自己的基础子对象。
在g ++中检查this相关问题。它被关闭不是一个错误。