В этом примере кода описывается функция языка, которую я считаю неинтуитивной.
class A {
public:
  A() {}
};
class B: private A
{
public:
  B() {}
};
class C: public B
{
public:
  C() {}
  void ProcessA(A* a) {
  }
};
int main() {
  C c;
}
Компиляция этого кода с Apple LLVM версии 4.2 на Mac создает
test.cc:16: error: ‘class A’ is inaccessible
test.cc:16: error: within this context
Замена void ProcessA(A* a) на void ProcessA(::A* a) приведет к его созданию, но я не понимаю, почему я должен использовать абсолютное имя класса здесь.
Является ли это функцией языка, которая позволяет избежать определенных ошибок или это просто темный угол грамматики С++, как требование разместить пространство между угловыми скобками (> >) в шаблонах, параметризованных другими шаблонами.
Спасибо!