编译器错误 C2477

“member”:静态数据成员无法通过派生类初始化

模板类的静态数据成员初始化不正确。 这是对 Visual Studio .NET 2003 之前的 Microsoft C++ 编译器版本的重大更改,以符合 ISO C++ 标准。

以下示例生成 C2477:

// C2477.cpp
// compile with: /Za /c
template <class T>
struct S {
   static int n;
};

struct X {};
struct A: S<X> {};

int A::n = 0;   // C2477

template<>
int S<X>::n = 0;