Результат, как и ожидалось, и разница в том, что используется статический тип указателя или тип объекта, на который указывает указатель.
Первый случай, использующий d
напрямую: as d
указывает на объект типа Derived
.Здесь это фактический (во время выполнения) тип печатаемого объекта.
В случае decltype
: используется статический тип выражения , который используется,Поскольку d
является unique_ptr<Base>
, тип d.get()
равен Base*
, а разыменование дает Base
.