C++ 我是否可以在类主体中默认私有构造函数?
GCC 4.5不允许我这样做: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&)”在类主体中不能
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.贝拉德。