2011-08-29 91 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。 –

相關問題