C++ 我是否可以在类主体中默认私有构造函数?

C++ 我是否可以在类主体中默认私有构造函数?,c++,language-lawyer,c++11,defaulted-functions,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.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&)”在类主体中不能默认声明为具有非公共访问权限


但是,GCC4.6允许我这样做。哪一个是正确的?

N3291中没有任何内容表明您不能声明某个
私有的
默认的
。注意,这是对第8.4.2节第2段中规范的变更;早期版本说它们必须公开。

“如果两者都被冻结,那么在水上行走和根据规范开发软件是很容易的。”——E.贝拉德。