Compiler Error C2970

 

The new home for Visual Studio documentation is Visual Studio 2017 Documentation on docs.microsoft.com.

The latest version of this topic can be found at Compiler Error C2970.

class' : template parameter 'param' : 'arg' : an expression involving objects with internal linkage cannot be used as a non-type argument

You cannot use the name or address of a static variable as a template argument. The template class expects a const value that can be evaluated at compile time.

The following sample generates 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;  

Show: