Compiler Warning (level 2) C4356

 

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 Warning (level 2) C4356.

member' : static data member cannot be initialized via derived class

The initialization of a static data member was ill formed. The compiler accepted the initialization.

This is a breaking change in the Visual C++ .NET 2003 compiler.

For code that works the same in all versions of Visual C++, initialize the member through the base class.

Use the warning pragma to suppress this warning.

The following sample generates C4356:

// C4356.cpp  
// compile with: /W2 /EHsc  
#include <iostream>  
  
template <class T>  
class C {  
   static int n;  
};  
  
class D : C<int> {};  
  
int D::n = 0; // C4356  
// try the following line instead  
// int C<int>::n = 0;  
  
class A {  
public:  
   static int n;  
};  
  
class B : public A {};  
  
int B::n = 10;   // C4356  
// try the following line instead  
// int A::n = 99;  
  
int main() {  
   using namespace std;  
   cout << B::n << endl;  
}  

Show: