我可以在类体中默认私有构造函数吗?

时间:2011-08-29 00:18:27

标签: c++ language-lawyer c++11 defaulted-functions

GCC 4.5不允许我这样做:

class foo {
public:
    foo() = default;

private:
    foo(foo const&) = default;
    foo& operator=(foo const&) = default;
};

它抱怨说:

  

错误:以非公共访问方式声明的'foo :: foo(const foo&)'不能在类体中默认为
  错误:'foo&用非公共访问声明的foo :: operator =(const foo&)'不能在类体中默认

然而,GCC 4.6让我这样做。哪一个是正确的?

1 个答案:

答案 0 :(得分:11)

N3291中没有任何内容表明您无法声明privatedefault。请注意,这是规范的更改,见第8.4.2节第2段;早期版本说他们必须公开。