$ 14.6.2/3 - "कक्षा टेम्पलेट या कक्षा टेम्पलेट के सदस्य की परिभाषा में, यदि वर्ग टेम्पलेट का आधार वर्ग टेम्पलेट-पैरामीटर पर निर्भर करता है, तो बेस क्लास स्कोप नहीं है कक्षा टेम्पलेट या सदस्य की परिभाषा के बिंदु पर या वर्ग टेम्पलेट या सदस्य के तत्काल के दौरान अयोग्य नाम लुकअप के दौरान जांच की गई। "टेम्पलेट + आश्रित नाम
इसके अनुसार, 'f(0)'
'D::g'
में 'B:f'
पर कॉल करना चाहिए। हालांकि जीसीसी (आइडियाऑन) एक अस्पष्ट त्रुटि देता है।
क्या यह gcc में एक बग है? Comau यह ठीक है
template<class T, class U> struct A{
template<class A, class B> A f(B b){A a; return a;}
};
struct B{
double f(double d){return 0.0;}
};
template<class T, class U> struct D : A<T, U>, B{
void g(){f(0);}
};
int main(){
D<double, double> d;
d.g();
}
वीएस 2008 अस्पष्टता त्रुटि भी देता है। –
मुझे लगता है कि जीसीसी को 'बी' में' एफ' मिलती है और समय-समय पर अंतर्निहित वर्ग सदस्य का उपयोग जोड़ता है, 'यह-> एफ (0) ', जो जीसीसी को तत्कालता में''में देखने के लिए बनाता है। यह गलत तरीका है - देखें http://llvm.org/bugs/show_bug.cgi?id=5838 –
@ जोहान्स शैब - litb: धन्यवाद – Chubsdad