このコードを見てください:
struct foo {
virtual int bleh() {
return 42;
}
};
template<typename T>
struct bar : public foo {
};
// ERROR
template<>
int bar<char>::bleh() {
return 12;
}
base::bleh
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();
}
};
しかし、これがコンパイルに失敗する理由については興味があります。コンパイラがコードを拒否するのはなぜですか?