Поделиться через


Ошибка компилятора C2975

"argument" : недопустимый аргумент шаблона для типа, ожидаемое выражение константы во время компиляции

Замечания

Аргумент шаблона не соответствует объявлению шаблона; Константное выражение должно отображаться в угловых скобках. Переменные не допускаются в качестве фактических аргументов шаблона. Проверьте определение шаблона, чтобы найти правильные типы.

Примеры

В следующем примере создается 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. Одним из решений будет компиляция /Zi вместо /ZI.

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

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