派生类中的静态方法可以在C ++中调用受保护的构造函数吗?

时间:2011-08-30 19:14:33

标签: c++ static constructor compiler-errors protected

此代码适用于clang,但g ++说:

  

错误:'A :: A()'受保护

class A
{
protected:
    A() {}
};

class B : public A
{
    static A f() { return A(); } // GCC claims this is an error
};

哪种编译器是对的?

1 个答案:

答案 0 :(得分:11)

g ++是对的。

C ++标准§11.5/ 1表示“< ...>访问必须通过指向派生类本身的指针,引用或对象< .. 。>”中。对于构造函数,这意味着只允许B调用A的受保护构造函数,以便构造自己的基础子对象。

在g ++中检查this相关问题。它被关闭不是一个错误。