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 {};
};
Ошибка исчезнет.