उदाहरण कोड लिया जाता है से: http://en.cppreference.com/w/cpp/types/add_cv (मैं एक छोटे से संशोधित।)एक कॉन्स अस्थायी कैसे एक कॉन्स पर गैर-कॉन्स सदस्य फ़ंक्शन को कॉल करने का विकल्प चुनता है?
struct foo
{
void m() { std::cout << "Non-cv\n"; }
void m() const { std::cout << "Const\n"; }
};
template<class T>
void call_m()
{
T().m();
}
int main()
{
call_m<foo>();
call_m<const foo>(); //here
}
और उत्पादन होता है:
Non-cv
Non-cv
दूसरी कॉल में
, T
स्थिरांक योग्य है, इसलिए T()
चाहिए कॉन्स संस्करण को कॉल करें, है ना? या क्या मुझे कुछ विशेष नियम याद आए हैं?
MSVC में एक बग की तरह लग रहा है, जी के बाद से ++ - 4.8 और बजना ++ - 3.2 कॉल स्थिरांक कार्य करते हैं। – ForEveR
हाँ, यह एक बग है जो पहले आया है। एमएसवीसी 'टी '(' '' में 'टी' के कॉन्स क्वालीफायरों को अनदेखा करता है। –
भाषा शब्दकोष की आवश्यकता है कि आपके टेम्पलेट के अंदर, यदि 'टी' एक ** गैर-वर्ग ** प्रकार संभव कॉन्स-अस्थिर योग्यता के साथ टाइप करता है, तो * prvalue * उत्पन्न करते समय योग्यता गिरा दी जाती है। ऐसा लगता है कि वीएस कक्षा के प्रकारों के लिए भी उसी तर्क का उपयोग कर रहा है (गलत तरीके से) –