コンパイラ エラー C2975
'argument' : 'type' の無効なテンプレート引数です。コンパイル時の定数式が必要です
テンプレート引数がテンプレート宣言と一致しません。定数式は、角かっこ内に表示される必要があります。 変数は、テンプレートの実際の引数として許可されません。 テンプレートの定義を調べて正しい型が指定されていることをご確認ください。
例
次の例では C2975 が生成され、正しい使用方法も示されています。
// C2975.cpp
template<int I>
class X {};
int main() {
int i = 4, j = 2;
X<i + j> x1; // C2975
X<6> x2; // OK
}
C2975 は、__LINE__
を /ZI
のコンパイル時定数として使用する場合にも発生します。 解決策の 1 つは、/ZI
ではなく /Zi
を使用してコンパイルする方法です。
// C2975b.cpp
// compile with: /ZI
// processor: x86
template<long line>
void test(void) {}
int main() {
test<__LINE__>(); // C2975
}