Рассмотрим следующий пример:
#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;
}
Это компилируется с помощью g++, но не компилируется с clang++, пробовал с помощью следующей команды: clang++ -std=c++11 -O0 main.cpp && ./a.out
Ошибка компиляции от clang:
main.cpp: 19: 13: ошибка: для инициализации по умолчанию объекта константного типа «const A» требуется предоставленный пользователем конструктор по умолчанию
Я узнал из этого переполнения стека Вопрос, классы, не относящиеся к POD, получают конструктор по умолчанию. Здесь это даже не нужно, потому что переменная имеет инициализацию по умолчанию в стиле С++ 11.
Почему это не для clang? Почему A() = default;
тоже не работает?