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


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

"class" : параметр шаблона "param" : "arg": выражение с участием объектов с внутренней компоновкой не может использоваться в качестве аргумента, отличного от типа

Имя или адрес статической переменной нельзя использовать в качестве аргумента шаблона. Класс шаблона ожидает константное значение, которое можно оценить во время компиляции.

Следующий пример приводит к возникновению ошибки C2970:

// C2970.cpp
// compile with: /c
static int si;
// could declare nonstatic to resolve all errors
// int si;

template <int i>
class X {};

template <int *pi>
class Y {};

X<si> anX;   // C2970 cannot use static variable in templates

// this would also work
const int i = 10;
X<i> anX2;