Dlaczego to jest dozwolone:
class Base;
class Derived : public Base;
std::unique_ptr<Derived> der (new Derived);
std::unique_ptr<Base> bas (new Base);
bas = std::move(der);
-- To jest w pełni dozwolone
void foo ( std::unique_ptr<Base> ptr);
foo(std::move(der));
-- a to już nie?!