看看这段代码:
struct foo {
virtual int bleh() {
return 42;
}
};
template<typename T>
struct bar : public foo {
};
// ERROR
template<>
int bar<char>::bleh() {
return 12;
}
我试图提供base::bleh
only for的定义bar<char>
,但编译器(gcc 4.7.2)通过以下诊断拒绝我的代码:
template-id ‘bleh<>’ for ‘int bar<char>::bleh()’ does not match any template declaration
似乎base::bleh
以某种方式隐藏在bar
. 我已经使用以下定义解决了这个问题bar
:
template<typename T>
struct bar : public foo {
// doesn't work
//using foo::bleh;
// this works
int bleh() {
return foo::bleh();
}
};
但我很好奇为什么这无法编译。为什么编译器拒绝我的代码?