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>();