यह प्रश्न इस टिप्पणी से उपजा है: 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सूचक अमान्य है। टिप्पणियों में चर्चा पर भी विचार करें।