const auto& [a, b] = f();
लिख रहा है f()
से लौटे ऑब्जेक्ट के जीवनकाल को विस्तारित करने की गारंटी, या कम से कम ऑब्जेक्ट a
और b
बाध्य हैं? the proposal के माध्यम से पढ़ना मुझे यह सुनिश्चित करने के लिए भाषा में कुछ भी स्पष्ट नहीं दिख रहा है कि यह तब तक करता है जब तक कि यह किसी अन्य चीज़ से ढंका न हो। हालांकि, निम्नलिखित अस्थायी के जीवन का विस्तार नहीं है, इसलिए मैं नहीं दिख रहा है कि यह कैसे कवर किया जाएगा:संरचित बाइंडिंग में कॉन्स संदर्भों को विघटित वस्तु का जीवनकाल बढ़ाएं?
const auto& a = std::get<0>(f());
कागज यह पता चलता है कि यह कवर किया जाता है लगता है के शीर्ष पर
सीवी-क्वालिफायर और अपघटन घोषणा के रेफरी-क्वालीफायर संदर्भ प्रारंभकर्ता के लिए शुरू की पर लागू होते हैं, न कि व्यक्तिगत सदस्य के लिए उपनाम
लेकिन वास्तविक मानक, निकटतम उल्लेख के लिए प्रस्तावित शब्दों में मैं बेलो देखता हूँ डब्ल्यू, हालांकि मुझे यकीन है कि कैसे इसे पढ़ने के लिए गारंटी मैं तलाश कर रहा हूँ प्राप्त करने के लिए नहीं कर रहा हूँ: अगर ई एक unparenthesized आईडी अभिव्यक्ति एक lvalue या संदर्भ एक के पहचानकर्ता-सूची से शुरू नामकरण है
अपघटन घोषणा, decltype (ई) संदर्भित प्रकार के विनिर्देश में दिए गए अपघटन घोषणा
ऐसा लगता है कि जीसीसी और बजना दोनों वस्तु के जीवन का विस्तार जब तक के आधार पर गुंजाइश के अंत के रूप में लौट आए है एक wandbox experiment। एक uglier one अपने स्वयं के प्रकार के लिए सभी घंटियां और सीटी लागू करने से बाहरी वस्तु और उसके अन्य डेटा सदस्यों का जीवनकाल बढ़ता प्रतीत होता है।
हालांकि लगभग निश्चित रूप से लेखकों के इरादे, मैं यह सुनिश्चित करना चाहता हूं कि भाषा गारंटी है कि यह सुरक्षित है।