Clang Error de compilación con inicialización predeterminada [duplicado]
Esta pregunta ya tiene una respuesta aquí:
Realmente necesito implementar un constructor proporcionado por el usuario para objetos constantes? 3 respuestasConsidere el siguiente ejemplo:
#include <iostream>
#include <type_traits>
struct A
{
//A() = default; // does neither compile with, nor without this line
//A(){}; // does compile with this line
int someVal{ 123 };
void foobar( int )
{
};
};
int main()
{
const A a;
std::cout << "isPOD = " << std::is_pod<A>::value << std::endl;
std::cout << "a.someVal = " <<a.someVal << std::endl;
}
Esto compila con g ++ pero no compila con clang ++, probé con el siguiente comando:clang++ -std=c++11 -O0 main.cpp && ./a.out
Error de compilación de clang:
main.cpp: 19: 13: error: la inicialización predeterminada de un objeto de tipo const 'const A' requiere un constructor predeterminado proporcionado por el usuario
Aprendí deEsta pregunta de desbordamiento de pila, que las clases que no son POD obtienen el constructor predeterminado. Esto incluso no es necesario aquí porque la variable tiene una inicialización predeterminada de estilo C ++ 11
¿Por qué esto no es para el sonido metálico? Por queA() = default;
@ no funciona también?