同様の質問がここで尋ねられましたが、適切な回答が得られませんでした。
以下は合法ですか?
struct B;
struct A
{
A(B& b) : b(b)
{
}
B& b;
};
struct B
{
B(A& a) : a(a)
{
}
A& a;
};
struct C
{
C() : a(b), b(a)
{
}
A a;
B b;
};
3.8(6)(C++ 2003)に該当するかな
... オブジェクトの有効期間が開始する前であるが、オブジェクトが占有するストレージが割り当てられた後、またはオブジェクトの有効期間が終了した後、オブジェクトが占有していたストレージが再利用または解放される前に、参照する左辺値元のオブジェクトに使用できますが、限られた方法でのみ使用できます。そのような左辺値は割り当てられたストレージ (3.7.3.2) を参照し、その値に依存しない左辺値のプロパティの使用は明確に定義されています。