E2105 'template' 限定子はメンバーテンプレート名を指定しなければならない (C++)
テンプレートパラメータに依存するコードを解析する場合,メンバー名をテンプレート関数名または通常のパラメータのどちらに解決するかを判断できない場合があります。次のコードでは,'<'(小なり)演算子をテンプレート引数リストの開始文字として解析するか,通常の '<' 演算子として解析するかを判断するために,'template' 限定子が必要です。
template<class T>
void foo(T a)
{
a.member<10>();
}
'<' の意味は読み手には明らかですが,コンパイラは,"member" がメンバーテンプレート関数を表すことを認識できず,コード行を次のように解析します。
a.member < (10>());
'<' がテンプレート引数リストの開始文字であることをコンパイラに通知するには,'template' 限定子が必要です。
a.template member<10>(); // "member" はメンバーテンプレートでなければなりません
"member" がメンバーテンプレートに解決されない状況で 'template' 限定子を使用すると,このエラーが発生します。