Is this C++ member initialization behavior well defined?
Let's assume we have a class B that has a member which is default initialized to 42. This class knows how to print the value of its member. (It does so in the c'tor): struct B { B() : member(42) { printMember(); } void printMember() const { std::cout << "value: " << member << std::endl; } int member; }; Then we add a class A which receives a const reference to a B and asks B to print its value: struct A { A(const B& b) { b.printMember(); } }; Finally we add another class Aggregate that aggregates an A and a B. The tricky part is that object a of type A is declared before object b type B, but then a is initialized using a (not yet valid?) reference to b: struct Aggregate { A a; B b; Aggregate() : a(b) { } }; Consider the output of creating an Aggregate (I have added some logging to both c'tor and d'tor of A and B) (Try it online!): a c'tor value: 0 b c'tor value: 42 b d'tor a d'tor Am I right to assume that it...