Modelos covariantes C ++

Sinto que este já foi solicitado antes, mas não consigo encontrá-lo no SO, nem encontro nada útil no Google. Talvez "covariante" não seja a palavra que estou procurando, mas esse conceito é muito semelhante aos tipos de retorno covariante em funções, então acho que provavelmente está correto. Aqui está o que eu quero fazer e isso me dá um erro de compilador:

class Base;
class Derived : public Base;

SmartPtr<Derived> d = new Derived;
SmartPtr<Base> b = d; // compiler error

Suponha que essas aulas sejam totalmente desenvolvidas ... acho que você entendeu a idéia. Não pode converter umSmartPtr<Derived> dentro deSmartPtr<Base> por algum motivo pouco claro. Lembro-me de que isso é normal em C ++ e em muitas outras linguagens, embora no momento não me lembre do porqu

Minha pergunta raiz é: qual é a melhor maneira de executar esta operação de atribuição? Atualmente, estou puxando o ponteiro doSmartPtr, convertendo-o explicitamente para o tipo base e agrupando-o em um novoSmartPtr do tipo apropriado (observe que isso não está vazando recursos, porque nossaSmartPtr class usa contagem de referência intrusiva). Isso é longo e bagunçado, principalmente quando preciso envolver oSmartPtr em outro objeto ... algum atalho?

questionAnswers(6)

yourAnswerToTheQuestion