Regarding the following C++ program:
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 produces the following error on the last assignment statement:
error: invalid conversion from ‘Child**’ to ‘Base**’
My question is in two parts:
- Why is there no implicit conversion from Child** to Base**?
 - I can make this example work with a C-style cast or a 
reinterpret_cast. Using these casts means throwing away all type safety. Is there anything I can add to the class definitions to make these pointers cast implicitly, or at least phrase the conversion in a way that allows me to usestatic_castinstead?