2010-09-10 16 views
5

$ 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(); 
} 
+0

वीएस 2008 अस्पष्टता त्रुटि भी देता है। –

+3

मुझे लगता है कि जीसीसी को 'बी' में' एफ' मिलती है और समय-समय पर अंतर्निहित वर्ग सदस्य का उपयोग जोड़ता है, 'यह-> एफ (0) ', जो जीसीसी को तत्कालता में''में देखने के लिए बनाता है। यह गलत तरीका है - देखें http://llvm.org/bugs/show_bug.cgi?id=5838 –

+0

@ जोहान्स शैब - litb: धन्यवाद – Chubsdad

उत्तर

5

मुझे लगता है कि यह जीसीसी में known bug है। बग रिपोर्ट के मुताबिक, आपका उदाहरण जीसीसी 4.4.0 के अंत में विफल रहता है। मुझे लगता है कि इसका मतलब है कि इसका परीक्षण किसी नए संस्करण पर नहीं किया गया है - यह नहीं कि यह तय किया गया है।

+0

वाह! संदर्भ के लिए धन्यवाद – Chubsdad

संबंधित मुद्दे