Clang Erro de compilação com inicialização padrão [duplicado]
Esta pergunta já tem uma resposta aqui:
ealmente preciso implementar o construtor fornecido pelo usuário para objetos cons 3 respostasConsidere o seguinte exemplo:
#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;
}
Isso compila com g ++, mas não compila com clang ++, tentado com o seguinte comando:clang++ -std=c++11 -O0 main.cpp && ./a.out
Erro de compilação do clang:
main.cpp: 19: 13: error: a inicialização padrão de um objeto do tipo const 'const A' requer um construtor padrão fornecido pelo usuário
Aprendi comThis Stack Overflow Pergunta, que as classes não-POD obtêm o construtor padrão. Isso nem é necessário aqui porque a variável possui inicialização padrão no estilo c ++ 11
Por que isso não acontece? PorqueA() = default;
não funciona também?