For an object with a non-trivial constructor,
referring to any non-static member or base class of the object
before the constructor begins execution results in undefined behavior.
[Example 1: struct W {int j;
};
struct X :publicvirtual W {};
struct Y {int*p;
X x;
Y(): p(&x.j){// undefined behavior, x is not yet constructed}};
— end example]