この特定のコードは、静的初期化順序の大失敗を起こしやすいですか? つまり、B の静的メンバー関数にアクセスするときに、コンパイル単位 "B" の静的初期化が既に行われていると仮定できますか?
// a.h
struct A {
static int foo();
static int var;
}
// a.cpp
#include <a.h>
int A::foo() {
return var;
}
int A::var = 42;
// b.h
struct B {
B::B();
static int var;
}
// b.cpp
#include <b.h>
#include <a.h>
B::B() {
var = A::foo();
}
// c.h
struct C {
static B b;
}
// c.cpp
B C::b;
または、次のようなコードがありますか?
// a.h
static int &A::var();
// a.cpp
int &A::var() {
static value = 42;
return value;
}
int A::foo() {
return var();
}
標準への参照を歓迎します。