#include <iostream>
void IsTrue(const bool value) {
if (value) {
std::cout << "value is True!\n";
}
}
int main()
{
IsTrue([]() { ; /* some lambda */ });
return 0;
}
आउटपुट:लैम्ब्डा एक बूल में क्यों परिवर्तित होता है जिसका मूल्य सत्य है?
value is True!
क्यों लैम्ब्डा जीसीसी & बजना पर true
को मूल्यांकन करता है? एमएसवीसी इसे नहीं बना सकता (लैम्ब्डा को बूल में परिवर्तित नहीं कर सकता)।
क्या यह एक कंपाइलर बग है? या मानक के कौन सा अनुच्छेद यह अनुमति देता है?
यह सुनिश्चित नहीं है कि यह कानूनी है या नहीं, लेकिन ऐसा लगता है कि यह लैम्ब्डा को फ़ंक्शन पॉइंटर में परिवर्तित कर रहा है और उसके बाद उस मान का उपयोग कर रहा है (जो शून्य नहीं है) तो यह संकलित करता है। यदि आप एक कैप्चर जोड़ते हैं [यह संकलन करने में विफल रहता है] (http://coliru.stacked-crooked.com/a/f28beac0173e86e4)। – NathanOliver
एमएसवीसी [एक गैर मानक विस्तार] है (https://adishavit.github.io/2016/magical-captureless-lambdas/), इसलिए आपको गंतव्य फ़ंक्शन पॉइंटर प्रकार को स्पष्ट रूप से वर्तनी करने की आवश्यकता है, अन्यथा रूपांतरण विफल हो जाएगा। – cpplearner
यह भी देखें [फ़ंक्शन पॉइंटर के रूप में लैम्ब्डा पास करना] (http://stackoverflow.com/q/28746744/1708801) –