मैंने मिश्रित परिणामों के साथ निम्नलिखित C++ 11 कोड संकलित करने का प्रयास किया।शाखा में लैम्ब्डा निरंतर अभिव्यक्ति से नहीं लिया गया: कौन सही है?
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;
- बजना: सफलतापूर्वक
NoTemplate
संकलित;YesTemplate
परerror: a lambda expression may not appear inside of a constant expression
देता है। - जीसीसी: दोनों सफलतापूर्वक संकलित
- msvc: क्रैश।
- आईसीसी: क्रैश (हम एक विजेता है!)
सही परिणाम क्या है? मुझे कुछ मानक भाषाएं दिखाई देती हैं जो निरंतर अभिव्यक्तियों में शॉर्ट-सर्किटिंग ऑपरेटरों की झूठी शाखा में गैर-निरंतर अभिव्यक्ति ठीक होनी चाहिए, लेकिन IANALL।
दुर्घटनाओं से आपका मतलब है कि कंपाइलर क्रैश या प्रोग्राम क्रैश हो जाता है? – user4581301
सी ++ 17 के मानक सेट के साथ नवीनतम वीसी (1 9 .12.something) में और स्तर 4 पर सेट की गई चेतावनियां मुझे '+' – SoronelHaetir
पर संदिग्ध ऑपरेटर मिलता है, जो क्लैंग बग की तरह दिखता है, क्लैंग हेड डायग्नोस्टिक प्रदान नहीं करता है [देखें यह ive] (https://wandbox.org/permlink/2I7TE8WOTzZvmeZC) भाषा [सशर्त के अनियमित हिस्से में लैम्बडा का समर्थन करती है] (https://stackoverflow.com/q/22232164/1708801) –