编译器错误 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
}

当使用 __LINE__ 作为 /ZI 的编译时常量时也会发生C2975。 一种解决方案是使用 /Zi 而不是 /ZI 编译。

// C2975b.cpp
// compile with: /ZI
// processor: x86
template<long line>
void test(void) {}

int main() {
   test<__LINE__>();   // C2975
}