グローバル変数a,bがあります。

class A {
public:
 int value;
 A() { value = 1; }
};

A a;

class B {
public:
 int value;
 B() { value = a.value; }
};

B b;

こういうので、aがコンストラクトされるまえにbがコンストラクトされてしまって
bは正しく初期化されない、ということってありえますか?
正しくは b.value == 1 になると思うのですが実際には0になります。
関係あるか分かりませんが、aとbは実際には別の翻訳単位で定義されています。
つかってるのはvc.net2003です。