एक टेम्पलेट उपनाम (उदा। एक अनुपलब्ध सदस्य टाइपनाम पर टेम्पलेट उपनाम, जैसा कि नीचे दिए गए कोड स्निपेट में है) में एक प्रतिस्थापन विफलता के मामले में, एक त्रुटि ट्रिगर की जानी चाहिए?टेम्पलेट उपनाम और sfinae
बजना और जीसीसी इस पर असहमत लगते हैं:
// some types
struct bar { };
struct foo {
typedef void member_type;
};
// template alias
template<class T>
using member = typename T::member_type;
template<class T>
void baz(...) { }
// only works for gcc, clang fails with: no type named 'member_type'
// in 'bar'
template<class T>
void baz(member<T>*) { }
int main(int, char**) {
baz<bar>(0); // picks first
baz<foo>(0); // picks second
return 0;
}
तो सवाल यह है: जो सही है, और क्यों?
मानकों के अनुसार धन्यवाद :-)
'clang -v' क्या कहता है? क्लैंग 3.3 ट्रंक कोड को ठीक से संकलित करता है। – Xeo
डेबियन क्लैंग संस्करण 3.1-8 यहां, ऐसा लगता है कि मुझे बस प्रतीक्षा करने की आवश्यकता है। आपकी प्रतिक्रिया के लिए धन्यवाद ! – max
क्या आप टेम्पलेट उपनाम से छुटकारा पा सकते हैं, बस थोड़ा सा – David