どこで使用するかを理解しようとしてtemplate
いtypename
ますが、回避できない問題に遭遇しました。f<T>
渡された型 (クラスになります) を使用して template-member-function を呼び出す template-function があります.f<T>
。関数本体での使用は正しいと思いますtypename
が、次のエラーが引き続き発生します。
source.cpp: 関数内
'void f()'
:
source.cpp:11:19: エラー: 非テンプレートがテンプレート'f'
として使用されました
source.cpp:11:19: 注:'typename T::C::template f'
テンプレートであることを示すために使用します
struct A {
struct C {
template <typename T> void f() {}
};
};
template <typename T> void f() {
typename T::C::f<int>();
}
int main() {
f<A>();
}
最後のエラーで、'typename T::C::template f'
代わりに使用することをお勧めします。そのため、それに応じて次の変更を行いました。
// ...
typename T::C::template f<int>();
// ...
言われたとおりにしましたが、次のエラー行を受け取りました。
エラー: で名前が付けられたクラス テンプレートがありませ
'f'
ん'struct A::C'
inという名前の public テンプレート関数が実際に存在するという点で、このエラーは正しくないと思います。ここで何が間違っているのでしょうか?f
struct A::C