N4527 14.5.5.1 [temp.class.spec.match]मिलान आंशिक विशेषज्ञताओं
2 एक आंशिक विशेषज्ञता किसी दिए गए वास्तविक टेम्पलेट तर्क सूची से मेल खाता है, तो आंशिक विशेषज्ञता के टेम्पलेट तर्क निष्कर्ष निकाला जा सकता है वास्तविक टेम्पलेट तर्क सूची से।
template<class T1, class T2, int I> class A { }; // #1 template<class T, int I> class A<T, T*, I> { }; // #2 template<class T1, class T2, int I> class A<T1*, T2, I> { }; // #3 template<class T> class A<int, T*, 5> { }; // #4 template<class T1, class T2, int I> class A<T1, T2*, I> { }; // #5 A<int, int, 1> a1; // uses #1 A<int, int*, 1> a2; // uses #2, T is int, I is 1 A<int, char*, 5> a3; // uses #4, T is char A<int, char*, 1> a4; // uses #5, T1 is int, T2 is char, I is 1 A<int*, int*, 2> a5; // ambiguous: matches #3 and #5
3 एक गैर प्रकार टेम्पलेट तर्क भी प्राथमिक टेम्पलेट की एक गैर प्रकार पैरामीटर का एक वास्तविक टेम्पलेट तर्क के मान से निष्कर्ष निकाला जा सकता है। [उदाहरण: उपरोक्त
a2
की घोषणा। अंत उदाहरण]4 एक प्रकार का नाम है कि एक वर्ग टेम्पलेट विशेषज्ञता के लिए संदर्भित करता है, (उदाहरण के लिए,
A<int, int, 1>
) तर्क सूची प्राथमिक टेम्पलेट के टेम्पलेट पैरामीटर सूची से मेल करेगा। विशेषज्ञता के टेम्पलेट तर्क प्राथमिक टेम्पलेट के तर्कों से घटाए गए हैं।
rule3 में, उदाहरण दिखाता है I
तीसरे वास्तविक टेम्पलेट तर्क 1
से निष्कर्ष निकाला है, यह क्या rule2 कहते है। तो नियम 4 की दूसरी वाक्य के रूप में, मुझे लगता है कि यह दोहराता है कि नियम 2 क्या कहता है।
उनके बीच अंतर क्या हैं (नियम 2, नियम 3 और नियम 4)?
एक और शब्द, हमारे पास पहले से ही नियम 2 है, नियम 3 के इरादे (अर्थ) और नियम 4 की दूसरी वाक्य क्या हैं, वे यहां क्यों हैं?
जाहिर है यह शब्द एक [लंबे समय] के लिए चारों ओर हो गया है (https://web.cs.dal.ca/~vlado/pl/cpp.txt)। – Barry
@ बैरी कुछ मानक पुरातत्व करना, ऐसा लगता है कि [N0668] (http://www.open-std.org/jtc1/sc22/wg21/docs/papers/1995/N0668.pdf) (मार्च, 1995)। तो कहीं और [N1043] (https://web.cs.dal.ca/~vlado/pl/cpp.txt) (दिसंबर, 1 99 6) के बीच में आपने उद्धृत किया है, उदाहरण विस्तृत किया जाना चाहिए। दुर्भाग्य से, सभी काम कर रहे पेपर ड्राफ्ट ऑनलाइन नहीं हैं। विशेष रूप से, [एन0836] (http://www.open-std.org/jtc1/sc22/wg21/docs/papers/1996/N0836.pdf) प्रासंगिक हो सकता है। – TemplateRex
नहीं एक असली जवाब है, लेकिन नियम 4 थोड़ा निरर्थक लगता है, तर्क लागू करने के लिए है कि आंशिक विशेषज्ञताओं प्राथमिक टेम्पलेट का आंशिक विशेषज्ञताओं वास्तव में कर रहे हैं हो सकता है। बहरहाल, यह पहले से ही [temp.class.spec] /8.4 में निर्दिष्ट किया जाता: "विशेषज्ञता प्राथमिक टेम्पलेट की तुलना में अधिक विशिष्ट हो जाएगा।" – TemplateRex