extern キーワードは単にコンパイラを「ブラインド」するはずではありませんか? エラーがない理由が理解できないコードを次に示します。
struct A {
int a;
};
class B {
static A x;
public:
void f() { x.a=0; }
};
extern A B::x; // not allocated.
main() {
B z;
z.f();
}
ご存知のように、静的メンバーは手動でインスタンス化する必要があります。ただし、 extern キーワードを追加しました。これは、実際には割り当てられていないことを意味します。正常にコンパイルされるのは非常に奇妙です!