重要なコンストラクターを使用するC++11のグローバル変数は、静的初期化フェーズでmainに入る前に作成されます。
同様に、非関数ローカルのthread_local変数は、スレッドごとの「thread_local初期化フェーズ」中に作成されます。
C ++ 11標準では、これらの変数を作成する順序を指定していますか?どちらの場合も、2つの変数がある場合:
// global scope
A::A() { b.f(); } // A constructor uses global b
A a;
B b;
C ++ 11標準では、初期化する順序を指定していますか、それとも変数を初期化せずに使用するとエラーが発生するように指定されていますか?
非関数ローカルthread_localの場合も同様です。
// global scope
A::A() { b.f(); } // A constructor uses global b
thread_local A a;
thread_local B b;
標準は、構築する必要のある順序を指定していますか?また、変数が初期化される前に別のコンストラクターから使用された場合に何が起こるかを定義していますか?
回答を得るための主張を裏付けるために、 C++11標準リファレンスを提供してください。