Следующий код компилируется в GCC:
constexpr struct {} s;
Но Кланг отвергает его со следующей ошибкой:
error: инициализация по умолчанию объекта const type ‘const struct (anonymous struct at …)’ без предоставленного пользователем конструктора по умолчанию
Я тестировал все версии GCC и Clang, которые я смог найти на https://gcc.godbolt.org/ . Каждая версия GCC принимает код, и каждая версия Clang отклоняет его.
Интересно, какой компилятор прав в этом случае?
Что говорит об этом стандарт?
Кланг придерживается следующего отрывка в [dcl.init] / 7 :
Если программа вызывает инициализацию по умолчанию объекта с типом const,
T
, тоT
должен быть типом classа с предоставленным пользователем конструктором по умолчанию.
Эта формулировка является дефектной и, следовательно, игнорируется GCC (и, как и v3.9, также Clang ).
Вышеприведенная цитата отличается от основной проблемы 253 из-за N2762 перемещения / настройки пункта 9, как цитируется.