$ 14.6.2 / 3 - “在类模板的定义或类模板的成员中,如果类模板的基类依赖于模板参数,则在非限定名称期间不检查基类范围在类模板或成员的定义点或在类模板或成员的实例化期间查找。“
据此,'f(0)'
中的来电'D::g'
应致电'B:f'
。然而,gcc(IdeOne)给出了一个ambiguit错误。
这是gcc中的错误吗? Comeau编译得很好
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 :(得分:5)
我认为这是海湾合作委员会的known bug。根据错误报告,您的示例会在GCC 4.4.0中失败。我认为这只是意味着它还没有在新版本上进行过测试 - 而不是它已被修复。