Tôi đã cố gắng biên dịch mã C++ 11 sau với kết quả hỗn hợp.Lambda trong nhánh không được biểu diễn liên tục: Ai là đúng?
struct NoTemplate {
static constexpr auto (*foo)() = false ? +[]{} : nullptr;
};
NoTemplate no_inst;
template<typename>
struct YesTemplate {
static constexpr auto (*foo)() = false ? +[]{} : nullptr;
};
YesTemplate<float> yes_inst;
- kêu vang: Biên dịch
NoTemplate
thành công; cung cấperror: a lambda expression may not appear inside of a constant expression
trênYesTemplate
. - gcc: Biên dịch cả thành công
- msvc: Sự cố.
- icc: Sự cố (chúng tôi có người chiến thắng!)
Kết quả chính xác là gì? Tôi thấy một số ngôn ngữ tiêu chuẩn cho thấy các biểu thức không liên tục nên được OK trong nhánh giả của các toán tử mạch ngắn trong các biểu thức không đổi, nhưng IANALL.
Do sự cố, bạn có nghĩa là trình biên dịch bị lỗi hoặc chương trình bị treo? – user4581301
Trong VC mới nhất (19.12.something) với tiêu chuẩn được đặt thành C++ 17 và cảnh báo được đặt ở cấp 4, tôi nhận được toán tử mơ hồ trên '+' – SoronelHaetir
Trông giống như một lỗi clang, clang HEAD không cung cấp chẩn đoán [xem it ive] (https://wandbox.org/permlink/2I7TE8WOTzZvmeZC) ngôn ngữ [hỗ trợ lambdas trong phần không được đánh giá của điều kiện] (https://stackoverflow.com/q/22232164/1708801) –