Рассмотрим следующий пример:Clang Ошибка компиляции при инициализации по умолчанию
#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;
}
Это компилировать с г ++, но не компилируется с лязгом ++, пытался с помощью следующей команды: clang++ -std=c++11 -O0 main.cpp && ./a.out
Compile ошибки из clang:
main.cpp:19:13: error: default initialization of an object of const type 'const A' requires a user-provided default constructor
Я узнал от This Stack Overflow Question, что классы, отличные от POD, получают конструктор по умолчанию. Это даже необязательно здесь, потому что переменная имеет инициализацию по умолчанию в стиле 11 ++
Почему это не для clang? Почему A() = default;
не работает, тоже?
Я думаю, что эта нить должна быть закрыта как дубликат предложения remyabel; возможно, напишите свой ответ на эту тему также –
@MattMcNabb Ответ на Potatoswatter на другой поток более всеобъемлющий, чем мой, поэтому я не хочу добавлять к этому шум. – Praetorian