class A {};
class B : private A {};
class C : private B
{
public:
class D : private A {}; // Error here
};
Этот код дает следующую ошибку (в VS 2013):
nested.cpp(8): ошибка C2247: "A" недоступна, потому что "B" использует 'private' для наследования от "A"
Он фиксируется, если я изменяю определение D следующим образом:
class D : private ::A {};
Это правильное поведение, и если да, то почему?
Сначала я думал, что это потому, что C наследует конфиденциально от B, который скроет базовые классы. Но если я исключаю класс "средний человек" B и просто использую это:
class A {};
class C : private A
{
public:
class D : private A {};
};
Ошибка исчезнет.