2016-06-19 17 views
36

Các mã sau biên dịch tốt với GCC:GCC chấp nhận `constexpr struct {} s;` nhưng Clang từ chối nó. Ai là đúng?

constexpr struct {} s; 

Nhưng Clang từ chối yêu cầu với các lỗi sau:

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

Tôi đã kiểm tra tất cả các phiên bản của GCC và Clang rằng tôi đã có thể tìm thấy ở https://gcc.godbolt.org/. Mỗi phiên bản của GCC chấp nhận mã và mỗi phiên bản của Clang từ chối nó.

Tôi tự hỏi trình biên dịch nào là chính xác trong trường hợp này?
Tiêu chuẩn nói gì về điều này?

+4

Thử dùng 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

Trả lời

35

Clang tuân thủ các đoạn văn sau đây trong [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.

từ ngữ này là defectivehence ignored by GCC (và, kể từ v3.9, cũng bởi Clang).
Trích dẫn trên khác với vấn đề cốt lõi 253 do N2762 di chuyển/điều chỉnh đoạn 9 như được trích dẫn.

+4

Từ ngữ cũng bị bỏ qua bởi VC++ 2015 – Ajay

Các vấn đề liên quan