initialize enclosed brace c++ c++11 gcc default-constructor gcc4.8

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.