C++11のテンプレートメソッド内で別のテンプレートを呼び出している箇所で、特定のコンパイラでコンパイル時、
error: expected primary-expression before ‘>’ token
なエラーに悩んでしまったので解決方法をメモします。
今まで見たことないので多分C++11からの仕様だと思います。
コードは以下のような感じになります。
// テンプレートなクラス
template<typename T1>
class TemplateClass
{
public:
template<typename T2> T2 func() { return T2(); }
};
// テンプレートな関数
template<typename T1, typename T2>
void templateFunction()
{
TemplateClass<T1> t;
t.func<T2>(); // < ここでエラーがでます
}
// templateFunctionをコール
void main()
{
templateFunction<int,float>();
}
上記のコードをビルドするとこんなエラーが出ます。
hoge.cpp: In function 'void templateFunction()':
hoge.cpp:xxx:xxx: error: expected primary-expression before '>' token
t.func<T2>();
^
hoge.cpp:xxx:xxx: error: expected primary-expression before ')' token
t.func<T2>();
^
VisualStudioでは出ずに、gccで出ます。
templateFunction()内の
t.func<T2>();
を以下のように書き換えるとビルドエラーが解消されます。
t.template func<T2>();