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

template <typename T>;
struct core_type
	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 ( 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.