2011-08-29 14 views
11

GCC 4.5 no me deja hacer esto:¿Puedo elegir un constructor privado en el cuerpo de la clase o no?

class foo { 
public: 
    foo() = default; 

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

Se queja de que:

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

Sin embargo, GCC 4.6 deja que lo haga yo. ¿Cuál es correcto?

Respuesta

10

No hay nada en N3291 que diga que no se puede declarar algo private y default. Tenga en cuenta que esto fue un cambio a la especificación, en la sección 8.4.2, párrafo 2; las versiones anteriores decían que deben ser públicas.

+0

A veces es bueno estar predeterminado en privado ... –

+4

"Caminar sobre el agua y desarrollar software a partir de una especificación son fáciles si ambos están congelados". - E. Berard. –

Cuestiones relacionadas