コードは次のとおりです。
template<typename T>
class base
{
public:
virtual ~base();
template<typename F>
void foo()
{
std::cout << "base::foo<F>()" << std::endl;
}
};
template<typename T>
class derived : public base<T>
{
public:
void bar()
{
this->foo<int>(); // Compile error
}
};
そして、実行時:
derived<bool> d;
d.bar();
次のエラーが表示されます。
error: expected primary-expression before ‘int’
error: expected ‘;’ before ‘int’
非依存の名前と 2 フェーズのルックアップを認識しています。しかし、関数自体がテンプレート関数 (foo<>()
コード内の関数) である場合、すべての回避策を試しても失敗しました。