¿Por qué la herencia protegida hace que dynamic_cast falle?

Cambié mi clase base de C ++ para serprotected herencia y midynamic_cast(s) dejó de funcionar.

¿Por qué cambiar la herencia aprotected cambiar el comportamiento dedynamic_cast?

struct Base {
  static Base *lookupDerived(); // Actually returns a Derived * object.
};

struct Derived : protected /* Switch this to public to get it working */ Base {
 static void test() {
   Base *base = lookupDerived();

   if (dynamic_cast<Derived *>(base)) {
      std::cout << "It worked (we must be using public inheritance)." << std::endl;
   } else {
      std::cout << "It failed (we must be using protected inheritance)." << std::endl;
   }
};

Respuestas a la pregunta(3)

Su respuesta a la pregunta