2011-08-29 22 views
11

GCC 4.5 bunu yapmama izin vermez:Sınıftaki özel kurucuyu varsayılan yapabilir miyim?

class foo { 
public: 
    foo() = default; 

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

O yakınır: Ancak, GCC 4.6 bana bunu sağlayan

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

. Hangisi doğru?

cevap

10

N3291'de, private ve default bir şey bildiremeyeceğiniz anlamına gelen hiçbir şey yoktur. Bu, bölüm 8.4.2, paragraf 2'deki belirtime göre değişikliğine dikkat edin; daha önceki versiyonlar kamuya açık olmaları gerektiğini söyledi.

+0

Bazen her zaman özel olarak varsayılan olmak güzel ... –

+4

"Her ikisi de donmuşsa, su üzerinde yürümek ve bir özellikten yazılım geliştirmek kolaydır." - E. Berard. –

İlgili konular