c++ - What are lookup rules when calling function from lambda? -
निम्न उदाहरण VC ++ 2010 में सामने आई समस्या को दर्शाता है:
वर्ग फ़ू {टेम्प्लेट & lt; class T & gt; स्थिर टी फू (टी टी) {वापसी टी; } सार्वजनिक: शून्य परीक्षण () {ऑटो लैम्ब्डा = [] () {रिटर्न एफू (1); }; // कॉल करने के लिए Foo :: foo & lt; int & gt; लैम्ब्डा (); }}; वीसी ++ का उत्पादन: त्रुटि C3861: 'foo' : पहचानकर्ता नहीं मिला अगर मैं कॉल को अर्हता प्राप्त करता हूं Foo: Foo :: foo (1); तब यह उदाहरण एक चेतावनी के साथ संकलित: चेतावनी C4573: 'foo :: foo' के उपयोग की आवश्यकता है संकलक को 'यह' पर कब्जा करना है लेकिन मौजूदा डिफॉल्ट कैप्चर मोड इसकी अनुमति नहीं देता इस मामले के बारे में मानक क्या कहते हैं? अयोग्य नाम होना चाहिए? क्या योग्य नाम के लिए यह
पर कब्जा करने की आवश्यकता है? कई मामलों में रिपोर्ट देखें:
जैसा आपने पाया है, स्पष्ट प्रस्ताव उसे नाम ढूंढने की अनुमति देता है। इसके बारे में एक अतिरिक्त चेतावनी है जो एक कंपाइलर त्रुटि भी है (नाम का समाधान इस तक पहुंच की आवश्यकता नहीं है, हालांकि मैं देख सकता हूं कि एक कंपाइलर कार्यान्वयन की आवश्यकता कैसे हो सकती है) - हालांकि यह एक अलग बग है माइक्रोसॉफ्ट ने इसकी पुष्टि एक बग होने के लिए की है और अगले रिलीज के लिए जाहिरा तौर पर एक फिक्स तैयार किया है।
Comments
Post a Comment