2011-08-29 96 views
11

GCC 4.5没有让我这样做:我可以在类体中默认一个私有构造函数吗?

class foo { 
public: 
    foo() = default; 

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

它抱怨说:

error: 'foo::foo(const foo&)' declared with non-public access cannot be defaulted in the class body
error: 'foo& foo::operator=(const foo&)' declared with non-public access cannot be defaulted in the class body

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

回答

10

N3291中没有什么说你不能声明privatedefault。请注意,这是一个更改的规定,在第8.4.2节第2段;早期版本说他们必须公开。

+0

有时只是很高兴默认为私人... –

+4

“如果两者都冻结,在水上行走和从规范开发软件很容易。” - E. Berard。 –

相关问题