[defns.dynamic.type] reads
⟨glvalue⟩ type of the most derived object to which the glvalue refers
from which I understand that given
struct B { virtual ~B() = default; };
struct D : B {};
std::unique_ptr<B const> d = std::make_unique<D const>();
D const is the dynamic type of *d, even if it happens to be known at compile time.
From [defns.static.type] I read that (my emphasis)
type of an expression resulting from analysis of the program without considering execution semantics
Does it mean that *d's static type is also D const, rather than B const?
After all the compiler can (and often does) carry on an analysis to conclude that *d is indeed a D const, not a B const.
std::unique_ptrwould automatically downcast like a dumb pointer does.unique_ptrwas not usable like in my code snippet, it would basically useless, because you couln't use it to handle polymorphic type, which after all is the only real reason for using pointers instead of just values.