यह प्रश्न इस टिप्पणी से उपजा है: C ++ 20 कोराउटाइन के लिए लैम्बडा आजीवन स्पष्टीकरण
इस उदाहरण के बारे में:
auto foo() -> folly::coro::Task<int> {
auto task = []() -> folly::coro::Task<int> {
co_return 1;
}();
return task;
}
तो सवाल यह है कि क्या कोरटाइन को अंजाम देकर लौटे foo
यूबी का परिणाम होगा।
"कॉलिंग" एक सदस्य फ़ंक्शन (ऑब्जेक्ट का जीवनकाल समाप्त होने के बाद) यूबी है: http://eel.is/c++draft/basic.life#6.2
... कोई भी पॉइंटर जो उस स्टोरेज लोकेशन के पते को दर्शाता है, जहाँ ऑब्जेक्ट होगा या स्थित था, का उपयोग किया जा सकता है लेकिन केवल सीमित तरीकों से। [...] कार्यक्रम में अपरिभाषित व्यवहार है यदि:
[...]
- सूचक का उपयोग गैर-स्थैतिक डेटा सदस्य तक पहुंचने के लिए किया जाता है या ऑब्जेक्ट के गैर-स्थिर सदस्य फ़ंक्शन को कॉल करने के लिए , या
हालाँकि, इस उदाहरण में:
()
लैम्ब्डा के ऑपरेटर को कहा जाता है जबकि लैम्बडा का जीवनकाल अभी भी मान्य है- इसके बाद उसे निलंबित कर दिया गया,
- तब मेमना नष्ट हो जाता है,
- और फिर सदस्य फ़ंक्शन (ऑपरेटर
()
) को कुछ बिंदु पर फिर से शुरू किया जाता है।
क्या इस बहाली को अपरिभाषित व्यवहार माना जाता है?
this
सूचक अमान्य है। टिप्पणियों में चर्चा पर भी विचार करें।