की C++ 17 पैरामीटर कटौती में टेम्पलेट कारण अस्पष्टता पर विचार करें:एक साधारण उदाहरण के निर्माता सकते हैं वर्ग टेम्पलेट
template <class T>
struct foo {
template <template <class> class TT>
foo(TT<T>&&) {}
foo(foo<T>&&){}
foo() {}
};
int main() {
foo f1(foo<int>{}); //case 1.
foo<int> f2(foo<int>{}); //case 2.
}
प्रकरण बजना में foo वर्ग के टेम्पलेट तर्क कटौती में 1. कारणों अस्पष्टता लेकिन जीसीसी में नहीं । मैंने सोचा कि टेम्पलेट फ़ंक्शंस (यहां - कन्स्ट्रक्टर) को ओवरलोड रिज़ॉल्यूशन में कम प्राथमिकता है। क्या यह मामला यहां नहीं है?
त्रुटि संदेश:
prog.cc:10:14: error: ambiguous deduction for template arguments of 'foo'
foo f1(foo<int>{}); //case 1.
^
prog.cc:4:5: note: candidate function [with T = int, TT = foo]
foo(TT<T>&&) {}
^
prog.cc:5:5: note: candidate function [with T = int]
foo(foo<T>&&){}
^
1 error generated.
आप सही हो सकते हैं, लेकिन मैं एक मानक रेफरी से खुश हूं। एमएसवीसी भी इस पर बमबारी करता है। संपादित करें: आपने मुझे इसे हराया। धन्यवाद। – AndyG
कॉपी कटौती उम्मीदवार के बारे में क्या? –
@VaughnCato - यह सूची में अगली गोली है। लेकिन मुझे नहीं लगता कि यह इस बात से संबंधित है कि यह संदिग्ध होना चाहिए या नहीं। – StoryTeller