Annex F (informative) Core undefined behavior [ub]

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

F.6.10[ub:class.cdtor.dynamic.cast]
Specified in: [class.cdtor]

If the operand of the dynamic_cast refers to the object under construction or destruction and the static type of the operand is not a pointer to or object of the constructor or destructor's own class or one of its bases, the dynamic_cast results in undefined behavior.
[Example 1: struct V { virtual void f(); }; struct A : virtual V {}; struct B : virtual V { B(V *, A *); }; struct D : A, B { D() : B((A *)this, this) {} }; B::B(V *v, A *a) { dynamic_cast<B *>(v); // defined, v of type V*, V base of B results in B* dynamic_cast<B *>(a); // undefined behavior, a has type A*, A not a base of B } — end example]