Erro do compilador C2970
'class' : parâmetro de modelo 'param' : 'arg' : uma expressão envolvendo objetos com vínculo interno não pode ser usada como um argumento sem tipo
Você não pode usar o nome ou o endereço de uma variável estática como um argumento de modelo. A classe de modelo espera um valor const que pode ser avaliado em tempo de compilação.
A amostra a seguir gera o erro 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;