Annex F (informative) Core undefined behavior [ub]

F.6 [class]: Classes [ub.class]

F.6.6[ub:class.cdtor.convert.pointer]
Specified in: [class.cdtor]

Converting a pointer to a base class of an object, when construction of that object has not started or destruction of that object has finished, has undefined behavior.
[Example 1: struct A { }; struct B : virtual A { }; struct C : B { }; struct D : virtual A { D(A*); }; struct X { X(A*); }; struct E : C, D, X { E() : D(this), // undefined behavior, upcast from E* to A* might use path E* D* A* // but D is not constructed // “D((C*)this)'' would be defined, E* C* is defined because E() has started, // and C* A* is defined because C is fully constructed X(this) {} // defined, upon construction of X, C/B/D/A sublattice is fully constructed }; — end example]