Konvertierung von Zeiger zu Zeiger zwischen abgeleiteten und Basisklassen?

In Bezug auf das folgende C ++ - Programm:

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;
}

GCC erzeugt den folgenden Fehler in der letzten Zuweisungsanweisung:

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

Meine Frage besteht aus zwei Teilen:

Warum gibt es keine implizite Konvertierung von Child ** zu Base **?Ich kann dieses Beispiel mit einer C-Besetzung oder einerreinterpret_cast. Die Verwendung dieser Abdrücke bedeutet, jegliche Art von Sicherheit zu vernachlässigen. Gibt es irgendetwas, das ich zu den Klassendefinitionen hinzufügen kann, um diese Zeiger implizit zu setzen, oder zumindest die Konvertierung so zu formulieren, dass ich es verwenden kann?static_cast stattdessen?