Conversão de ponteiro para ponteiro entre classes derivada e base?

Em relação ao seguinte programa C ++:

class Base { };

class Child : public Base { };

int main()
{   
    // Normal: using child as base is allowed
    Child *c = new Child();
    Base *b = c;

    // Double pointers: apparently can't use Child** as Base**
    Child **cc = &c;
    Base **bb = cc;

    return 0;
}

O GCC produz o seguinte erro na última declaração de atribuição:

error: invalid conversion from ‘Child**’ to ‘Base**’

Minha pergunta está dividida em duas partes:

Por que não há conversão implícita de Child ** para Base **?Eu posso fazer esse exemplo funcionar com um elenco de estilo C ou umreinterpret_cast. Usar esses modelos significa jogar fora todo o tipo de segurança. Existe algo que eu possa adicionar às definições de classe para fazer com que esses ponteiros sejam convertidos implicitamente ou pelo menos sintonize a conversão de uma maneira que me permita usarstatic_cast em vez de?

questionAnswers(1)

yourAnswerToTheQuestion