E2105 'template' 限定子はメンバーテンプレート名を指定しなければならない (C++)

提供: RAD Studio
移動先: 案内検索

コンパイラのエラーと警告(C++):インデックス への移動

テンプレートパラメータに依存するコードを解析する場合,メンバー名をテンプレート関数名または通常のパラメータのどちらに解決するかを判断できない場合があります。次のコードでは,'<'(小なり)演算子をテンプレート引数リストの開始文字として解析するか,通常の '<' 演算子として解析するかを判断するために,'template' 限定子が必要です。



 template<class T>
 void foo(T a)
 {
 a.member<10>();
 }



'<' の意味は読み手には明らかですが,コンパイラは,"member" がメンバーテンプレート関数を表すことを認識できず,コード行を次のように解析します。



 a.member < (10>());



'<' がテンプレート引数リストの開始文字であることをコンパイラに通知するには,'template' 限定子が必要です。



 a.template member<10>();   // "member" はメンバーテンプレートでなければなりません



"member" がメンバーテンプレートに解決されない状況で 'template' 限定子を使用すると,このエラーが発生します。