From [defns.dynamic.type]:
dynamic type
<glvalue> type of the most derived object [intro.object] to which the glvalue refers
[Example: If a pointer [dcl.ptr]pwhose static type is “pointer to class B” is pointing to an object of class D, derived from B [class.derived], the dynamic type of the expression*pis “D”. References [dcl.ref] are treated similarly. —end example]
Consider the following (based on the example given above):
class B {};
class D: public B {} d;
B *p = &d; // dynamic type of `*p`?
It seems according to the purport of the example that the dynamic type of *p would be "D". However, [dcl.init] stipulates that the initializer prvalue &d will be converted (by standard pointer conversion) to "pointer to B" before becoming the initial value of p. Per [conv.ptr], that value will be "a pointer to the base class subobject of the derived class object" (that is, the B subobject of d). Then per [expr.unary.op], *p will be an lvalue referring to the B subobject, not a most derived object, never mind d. What then is its dynamic type? Furthermore, how could p ever actually point to d without a reinterpret_cast<B*>?