C4356 de aviso (nível 2) do compilador

'membros' : membro de dados estáticos não pode ser inicializado por meio da classe derivada

A inicialização de um membro de dados estáticos ill foi formada. O compilador aceita a inicialização.

Esta é uma alteração significativa no Visual C++.Compilador NET 2003.

Para códigos que funcionam em todas as versões do Visual C++, inicialize o membro por meio da classe base.

Use o warning pragma para suprimir este aviso.

O exemplo a seguir gera 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;
}