Ответ 1
Стандарт позволяет вводить имена классов менее доступными, чем исходные имена. Об этом даже упоминается в примечании в §11.1/5 вместе с примером:
[Примечание. В производном классе поиск имени базового класса будет найдите имя введенного класса вместо имени базового класса в область, в которой она была объявлена. Имя, указанное в виде инъекций, может быть менее доступным, чем имя базового класса в области, в которой было объявлено. -end note]
[Пример:
class A { }; class B : private A { }; class C : public B { A *p; // error: injected-class-name A is inaccessible ::A *q; // OK };
-end пример]
Доступ к A
unqualified использует введенное имя, которое недоступно, поскольку оно происходит из частного наследования. Доступ к A
qualified использует объявленное имя, доступное в глобальной области.