c++ - लैम्बडास को स्थिर सदस्य समारोह को कॉल करने के लिए 'इस' को कैप्चर करने की आवश्यकता है?



lambda c++11 (1)

मैं सहमत हूं, इसे ठीक से संकलित करना चाहिए। फिक्स के लिए (यदि आप पहले से ही नहीं जानते थे), बस संदर्भ कैप्चर जोड़ें और यह जीसीसी 4.6 पर ठीक संकलित करेगा

struct B
{
    void g()
    {
        [&]() { B::f(); }();
    }

    static void f() { std::cout << "Hello World" << std::endl; };
};

https://code.i-harness.com

निम्नलिखित कोड के लिए:

struct B
{
    void g()
    {
        []() { B::f(); }();
    }

    static void f();
};

जी ++ 4.6 त्रुटि देता है:

test.cpp: लैम्ब्डा फ़ंक्शन में:
test.cpp: 44: 21: त्रुटि: 'यह' इस लैम्ब्डा फ़ंक्शन के लिए कैद नहीं किया गया था

(दिलचस्प बात यह है कि जी ++ 4.5 कोड ठीक करता है)।

क्या यह g ++ 4.6 में एक बग है, या क्या यह स्थिर सदस्य फ़ंक्शन को कॉल करने में सक्षम होने के लिए 'इस' पैरामीटर को कैप्चर करना वाकई आवश्यक है? मुझे नहीं लगता कि यह क्यों होना चाहिए, मैंने भी B:: साथ कॉल योग्यता प्राप्त की।





c++11