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

R. *_*des 11 c++ language-lawyer defaulted-functions c++11

GCC 4.5不允许我这样做:

class foo {
public:
    foo() = default;

private:
    foo(foo const&) = default;
    foo& operator=(foo const&) = default;
};
Run Code Online (Sandbox Code Playgroud)

它抱怨说:

错误:使用非公共访问声明的'foo :: foo(const foo&)'在类体
错误中无法默认:使用非公共访问声明的'foo&foo :: operator =(const foo&)'不能默认为阶级身体

但是,GCC 4.6让我这样做.哪一个是正确的?

Nic*_*las 11

没有什么N3291,说你不能申报的东西private和default.请注意,这是对规范的更改,见第8.4.2节第2段; 早期版本说他们必须公开.

  • "如果两者都被冻结,走在水上并从规范开发软件很容易." - E. Berard. (4认同)