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.