ध्यान दें कि *first
एक lvalue अभिव्यक्ति है, तो decltype(*first)
का परिणाम प्रकार const int&
, अर्थात const int
के लिए एक संदर्भ होगा। संदर्भ const
स्वयं नहीं है (यह कॉन्स्ट-योग्य नहीं हो सकता है, int& const
जैसी कोई चीज़ नहीं है), std::remove_const
का उपयोग करके, उसी प्रकार, यानी const int&
का उपयोग करेगा।
decltype specifier देखें: तर्क प्रकार T
के किसी भी अन्य अभिव्यक्ति, और
ख) यदि अभिव्यक्ति के मूल्य वर्ग lvalue है, तो decltype
पैदावार T&
है
3) है;
आप एक साथ std::remove_reference
साथ std::remove_const
इस्तेमाल कर सकते हैं:
std::remove_const<std::remove_reference<deref>::type>::type // -> int
~~~~~ // -> const int &
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // -> const int
BTW
:
ध्यान दें कि मैं std::thread
का उपयोग सिर्फ पठनीय प्रकार प्राप्त करने के लिए त्रुटियों में:
ध्यान दें कि यह इस मामले के लिए सही प्रकार नहीं देता है। यहाँ Effective Modern C++ (Scott Meyers) से इस के लिए एक वर्ग टेम्पलेट सहायक है:
template<typename T>
class TD;
और के रूप में
TD<deref> td;
इसका इस्तेमाल आप deref
के प्रकार युक्त त्रुटि संदेश, उदा मिलेगा clang से:
prog.cc:16:11: error: implicit instantiation of undefined template 'TD<const int &>'
TD<deref> td;
^
आपका शीर्षक 'remove_reference' कहता है, लेकिन आप इसे अपने शरीर में उपयोग नहीं करते हैं। –
टीएनएक्स, फिक्स्ड, दोनों मूल कोड में उपयोग कर रहा था इसलिए मैंने इसे मिश्रित किया :) – NoSenseEtAl
मैं आपको [this] (http://coliru.stacked-crooked.com/a/bfccfe0a5508f107) का उपयोग करने के बजाय अपने प्रकार के प्रकार दिखाने के लिए अनुशंसा करता हूं 'std :: thread' विधि क्योंकि यह वास्तविक प्रकार दिखाता है जो' const int 'है जबकि आपकी विधि आपके लिए है और' const int 'दिखाती है। – nwp