Почему защищенное наследование приводит к сбою dynamic_cast?

Я изменил свой базовый класс C ++, чтобы бытьprotected наследство и мойdynamic_cast(с) перестал работать.

Зачем менять наследство наprotected изменить поведениеdynamic_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;
   }
};

Ответы на вопрос(3)

Ваш ответ на вопрос