enclosed - C++ 11 constructor privado por defecto
initialize vector c++ 11 (1)
El siguiente código de C ++ 11 se compila correctamente en mi GCC 4.8:
struct NonStack
{
private:
NonStack() = default;
public:
static NonStack* Create(){
return new NonStack;
}
};
NonStack a;
int main() { }
Sin embargo lo siguiente da un error de compilación:
struct NonStack
{
private:
NonStack(){}
};
NonStack a;
int main() { }
¿Por qué el primero tiene éxito? ¿No debería el constructor predeterminado privado prohibir la creación de un objeto a través de NonStack a;
?
Esto es gcc bug 54812 , el compilador no respeta los especificadores de acceso para funciones de miembro especiales explícitamente predeterminadas. El error 56429 , que está marcado como un duplicado del anterior, tiene un caso de prueba que es casi idéntico al ejemplo de la pregunta.
Las soluciones son actualizar a gcc4.9, que resuelve el problema. O cree un cuerpo vacío para el constructor, en lugar de hacerlo de manera predeterminada, como lo hizo en el segundo ejemplo.