2016-06-19 10 views
36

Poniższy kod kompiluje grzywny z GCC:GCC akceptuje `constexpr struct {} s;` ale Clang je odrzuca. Kto jest poprawny?

constexpr struct {} s; 

Ale Clang odrzuca je z powodu następującego błędu:

error: default initialization of an object of const type 'const struct (anonymous struct at …)' without a user-provided default constructor

mam przetestowane wszystkie wersje GCC i Clang, że udało mi się znaleźć w https://gcc.godbolt.org/. Każda wersja GCC akceptuje kod i każda wersja Klangu odrzuca go.

Zastanawiam się, który kompilator jest poprawny w tym przypadku?
Co standard mówi na ten temat?

+4

Spróbuj clang-3.9? –

+5

[CWG253] (http://wg21.link/CWG253). –

+1

@ T.C. http://stackoverflow.com/questions/29683381/const-t-works-const-t-fails-when-t-is-a-non-pod#comment47503814_29683381 – Columbo

Odpowiedz

35

Clang przylega do następnego przejścia w [dcl.init]/7:

If a program calls for the default initialization of an object of a const-qualified type T , T shall be a class type with a user-provided default constructor.

Sformułowanie to defective i hence ignored by GCC (oraz od v3.9, również Clang).
Powyższy cytat różni się od głównej kwestii 253 z powodu N2762 przenoszenia/dostosowywania ust. 9 jako cytowany.

+4

Sformułowanie ignorowane również przez VC++ 2015 – Ajay

Powiązane problemy