इस उदाहरण पर विचार:क्या 'बेस :: ऑपरेटर टी` का उपयोग कर रहा है जहां `टी` टेम्पलेट प्रकार पैरामीटर है?
struct B { operator int(); };
template<class T>
struct X:B
{
using B::operator T;
};
GCC, कोड को स्वीकार करता है, जबकि Clang और MSVC यह खारिज कर दिया। कौन सा सही है?
ध्यान दें कि अगर आधार प्रकार निर्भर है, सभी compilers कोड स्वीकार करते हैं:
template<class T>
struct B { operator T(); };
template<class T>
struct X:B<T>
{
using B<T>::operator T;
};
यदि आप 'बी' में 'ऑपरेटर int() 'को एक टेम्पलेटेड रूपांतरण फ़ंक्शन (उदाहरण के लिए' टेम्पलेट ऑपरेटर टी(); ') करते हैं, तो यह काम करता है, और यदि आप इसे' int 'के लिए विशेषज्ञ करते हैं, तो यह भी काम करता है और कॉल करता है विशेषज्ञता जहां तक मैं समझता हूं, मानक इसे मना करता है (* "चूंकि रूपांतरण कार्यों के लिए सदस्य टेम्पलेट्स की विशेषज्ञताएं नाम लुकअप, द्वारा नहीं मिलती हैं, इसलिए इन्हें तब नहीं माना जाता है जब उपयोग-घोषणा एक रूपांतरण फ़ंक्शन निर्दिष्ट करती है (14.5.2) । "*)। इसके अलावा, अगर आप इसे सदस्य फ़ंक्शन में कॉल करते हैं तो क्लैंग 'ऑपरेटर टी' ढूंढने में सक्षम है, इसलिए मुझे लगता है कि जीसीसी सही है। –
Holt