Sau đây thất bại trong việc biên dịch theo cả gcc và kêu vang trong C++ 14, nhưng thành công với C++ 1Z:Định nghĩa lại các thành viên dữ liệu tĩnh constexpr có được phép không? (nhưng không phải là nội tuyến const)?
struct Cls {
static constexpr int N = 0;
};
constexpr int Cls::N;
constexpr int Cls::N;
Các lỗi C++ 14 là có thể dự đoán: redefinition of ‘constexpr const int Cls::N’
gì thay đổi làm cho điều này hợp pháp? Tôi tìm thấy:
n4659 10.1.5 [dcl.constexpr]
Một chức năng hoặc thành viên dữ liệu tĩnh tuyên bố với constexpr specifier là ngầm một hàm nội tuyến hoặc biến
Vì vậy, Tôi nghĩ rằng nó có thể phải làm với các biến nội tuyến, nhưng sau đây không cho C++ 1z theo cả hai trình biên dịch
struct Cls {
static inline const int N = 0;
};
inline const int Cls::N; // note, only one definition here