Aşağıdaki C++ 11 kodunu karışık sonuçlarla derlemeye çalıştım.Şube içindeki lamdada sürekli ifadeden alınmadı: Kim haklı?
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;
- çınlama: başarıyla
NoTemplate
hazırlar,error: a lambda expression may not appear inside of a constant expression
,YesTemplate
numaralı telefondan verir. - gcc: Her ikisi de başarıyla derler
- msvc: Kilitleniyor.
- icc: Kazalar (işte kazanan!)
doğru sonucu nedir? Sabit olmayan ifadelerin, sabit ifadelerdeki kısa devre operatörlerinin yanlış dalında Tamam olması gerektiğini söyleyen standart bir dil görüyorum, fakat IANALL.
Çökmeler ile derleyici çöker mi, yoksa program çöküyor mu? – user4581301
En son VC'de (19.12.something) C++ 17'ye ayarlanmış ve 4. seviyeye ayarlanmış uyarılar ile belirsiz operatöre '+' işareti veririm – SoronelHaetir
Clang hatası gibi görünüyor, clang HEAD bir tanılama sağlamaz [bkz. ive] (https://wandbox.org/permlink/2I7TE8WOTzZvmeZC) dili [koşullu durumun değerlendirilmemiş bölümünde lambdaları destekler] (https://stackoverflow.com/q/22232164/1708801) –