This bug is only present when language extensions are enabled. The response from Microsoft was a bit disappointing:
"Hi: this is By-Design - experience showed that most users considered the declaration + initialization within the class to be a definition and hence they didn't understand why the [sic] needed (in some circumstances) to define the member outside of the class. As you said the compiler handles this correctly with /Za."
test.h:
#ifndef TEST_H #define TEST_H class Test { public: static const int V = 2; }; #endif
test.cpp:
#include "test.h" const int Test::V;
main.cpp:
#include "test.h" int main() { return 0; }