$ 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();
}
Run Code Online (Sandbox Code Playgroud)