It’s impossible to know C++ completely. Next code will fail to link(GCC) - undefined variable:

template <typename T>;
struct core_type
{
public:
	static  int m_var;
};

struct  test_type: public core_type<test_type>;
{
	int m_another_var;
};

template<>; int core_type::m_var;

If change last line to

template<>; int core_type::m_var=0;

it compiles succesfully!

And it’s proper behavior ISO/IEC 14882 (14.7.3.15) says that an explicit specialization of a static data member of a template is a definition only when it includes an initializer. There is no syntax to define it with default value.

Visual Studio handles it without any error.