c++ - 模板+相关名称

标签 c++ templates

$14.6.2/3 - “在类模板或类模板成员的定义中,如果类模板的基类依赖于模板参数,则在非限定名称期间不检查基类作用域在类模板或成员的定义点或在类模板或成员的实例化期间查找。”

按照这个,'D::g' 中的调用 'f(0)' 应该调用 'B:f' .然而 gcc(IdeOne) 给出了一个模糊的错误。

这是 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();
}

最佳答案

我认为它是一个 known bug在海湾合作委员会。根据错误报告,您的示例迟至 GCC 4.4.0 失败。我认为这只是意味着它还没有在较新的版本上进行过测试 - 而不是它已被修复。

关于c++ - 模板+相关名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3684756/

相关文章:

c++ - 调用 std::functions

c++ - 访问分配给线程的堆栈

c++ - 如何忽略子项目中的 CMake 编译器定义

c++ - MSPaint 未接收通过 PostCommand 发送的命令

c++ - 模板函数的隐式转换

c++ - 有没有一种聪明的方法来实现完全静态的观察者模式(在编译时)

c++ - 为什么虚拟函数在分配给 'new' 时不能未实现?

c++ - 正确的 Xcode 设置

C++持久化数据

c++ - 如何在 VC10 中跨 DLL 边界使用具有静态数据成员的模板化类