模板+从属名称

Chu*_*dad 5 c++ templates

$ 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)

Mic*_*fik 5

我认为这是GCC中一个已知的错误.根据错误报告,您的示例会在GCC 4.4.0中失败.我认为这只是意味着它还没有在新版本上进行测试 - 而不是它已被修复.