Почему простое упоминание базового указателя / ссылки в последующих закрытых классах запрещено?

struct B {};
struct D : private B {
  B* fun () { return new D; }  // ok
}
struct DD : public D {
  B* foo () { return 0; } // error: ‘struct B B::B’ is inaccessible !
};

Эта ошибка кажется мне необоснованной. Если мы можем использовать простойB* в глобальном масштабе, то почему не в его частных классах?демо g ++

Мы не пытаемся конвертироватьDD* вB*, что запрещено правилами языка (этот,этот,этот связанные вопросы).

Обратите внимание, что если я изменюB* foo() вint foo()все идет хорошо.

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

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