テンプレートとして渡されたクラスのテンプレートなスタティック関数を呼び出すときに困ったのでメモ.
ハマッたコード
class A{ public: template <class T> static void func(){ T x; (略) } }; template <class T1, class T2> void test(){ T1::func<T2>(); }
Visual Studio 2012ではコンパイルが通るっぽいけど,g++(4.8)でコンパイルすると
‘>’ の前に primary-expressionがない的なエラーが起きた.
困った時のclang頼み.
clang++でコンパイルをすると,今度は
func の前に template を入れろ的なエラー.
そして最終的なコードは
template <class T1, class T2> void test(){ T::template func<T2>(); }
となりました.
これならg++でもclang++でもコンパイルが通った!
Visual Studioでは…