В этом примере кода описывается функция языка, которую я считаю неинтуитивной.
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)
приведет к его созданию, но я не понимаю, почему я должен использовать абсолютное имя класса здесь.
Является ли это функцией языка, которая позволяет избежать определенных ошибок или это просто темный угол грамматики С++, как требование разместить пространство между угловыми скобками (> >
) в шаблонах, параметризованных другими шаблонами.
Спасибо!