Carcaça dinâmica para unique_ptr

Como foi o caso no Boost, o C ++ 11 fornece algumas funções para fundiçãoshared_ptr:

std::static_pointer_cast
std::dynamic_pointer_cast
std::const_pointer_cast

Eu estou querendo saber, no entanto, por que não há funções equivalentes paraunique_ptr.

Considere o seguinte exemplo simples:

class A { virtual ~A(); ... }
class B : public A { ... }

unique_ptr<A> pA(new B(...));

unique_ptr<A> qA = std::move(pA); // This is legal since there is no casting
unique_ptr<B> pB = std::move(pA); // This is not legal

// I would like to do something like:
// (Of course, it is not valid, but that would be the idea)
unique_ptr<B> pB = std::move(std::dynamic_pointer_cast<B>(pA));

Existe alguma razão pela qual este padrão de uso é desencorajado e, portanto, funções equivalentes às presentes noshared_ptr não são fornecidos paraunique_ptr?

questionAnswers(7)

yourAnswerToTheQuestion