मैं यहाँ पर another question की वजह से लैम्बडास और कंपाइलर्स के साथ प्रयोग कर रहा था।
मैं सिर्फ महसूस किया है (और यह वास्तव में पूरी तरह से सामान्य है) कि निम्नलिखित कोड मान्य है:[] <typename>() {} एक वैध लैम्ब्डा परिभाषा है?
int main() {
auto l = [](){};
l.operator()();
}
वास्तव में मानक का कहना है कि बंद प्रकार एक सार्वजनिक इनलाइन समारोह कॉल ऑपरेटर है और इतने पर, इस प्रकार यह समझने में सक्षम होने के लिए समझ में आता है।
क्या मैं मानक को देखकर व्याख्या नहीं कर सकते (अच्छी तरह से, काम मसौदा) तथ्य यह है कि जीसीसी (6.1) को संकलित निम्नलिखित स्निपेट है (बजना 3.9 नहीं करता है):
int main() {
auto l = []<typename>(){};
l.operator()<void>();
}
कोई चेतावनी नहीं , त्रुटियाँ नहीं। क्या यह वैध कोड है या इसे संकलक द्वारा खारिज कर दिया जाना चाहिए?
[सफलतापूर्वक संकलित] (http://cpp.sh/4asuj) – amanuel2
@ amanuel2 मुझे पता है कि यह संकलित (जीसीसी कम से कम) के साथ है, लेकिन सवाल है, तो है यह मान्य है या नहीं। – skypjack
सी ++ 14 "टेम्पलेटेड" लैम्बडास को अनुमति देगा, लेकिन यह '<>' टेम्पलेट सिंटैक्स के बजाय 'ऑटो' कीवर्ड के साथ है (https://stackoverflow.com/questions/3575901/can-lambda-functions-be देखें -templated)।शायद जीसीसी डेवलपर्स इस तरह की कार्यक्षमता को जोड़ने के विभिन्न तरीकों से प्रयोग करना चाहते थे? –