मैं समझने की कोशिश कर रहा हूं कि std::declval<T>()
कैसे काम करता है। मैं इसे कैसे उपयोग करने के लिए, और पता है कि वह क्या करता पता है, मुख्य रूप से आप वस्तु के निर्माण के बिना decltype
उपयोग करने के लिए, की तरहstd :: declval <T>() काम कैसे करता है?
decltype(std::declval<Foo>().some_func()) my_type; // no construction of Foo
मैं cppreference.com कि std::declval<Foo>
से पता की अनुमति देता है "कहते हैं," Foo
करने के लिए एक rvalue संदर्भ, जिसकी वजह से संदर्भ ढहने के नियम या तो एक रावल्यू संदर्भ या एक लालू संदर्भ होने के समाप्त होता है। मेरा सवाल यह है कि Foo
के निर्माता को क्यों नहीं कहा जाता है? टेम्पलेट पैरामीटर के निर्माण के बिना std::declval<T>
का "खिलौना" संस्करण कैसे कार्यान्वित कर सकता है?
पुनश्च: I know यह पुरानी चाल के रूप में ही
(*(T*)(nullptr))
उसी पृष्ठ से: "ध्यान दें कि क्योंकि अस्वीकृति के लिए कोई परिभाषा मौजूद नहीं है, इसका उपयोग केवल अनियमित संदर्भों में किया जा सकता है; यह एक अभिव्यक्ति का मूल्यांकन करने में त्रुटि है जिसमें यह फ़ंक्शन शामिल है।" –
@remyabel हां, मैंने देखा कि, मुझे नहीं पता कि कैसे अपना खुद का 'घोषणा' – vsoftco
'टेम्पलेट < class T > टाइपनाम std :: add_rvalue_reference :: प्रकार अस्वीकरण(); 'सचमुच आपको केवल इतना ही चाहिए। [लाइव उदाहरण] (http://coliru.stacked-crooked.com/a/9a8d4e5cfa60355f) –