Рассмотрим:
struct A { int x;};
struct B : A {};
struct C : private A {};
Теперь, как и ожидалось, код
struct D : C
{
D () { C::x = 2; }
};
int main () { D d; }
не компилируется:
test2.cc: In constructor ‘D::D()’:
test2.cc:1:16: error: ‘int A::x’ is inaccessible
test2.cc:7:12: error: within this context
Теперь, если я делаю
struct D : B, C
{
D () { C::x = 2; }
};
int main () { D d; }
тогда ошибка исчезнет! Разве A::x
тоже не может быть недоступен? Какое объяснение здесь?
Я использую gcc version 4.7.2 (GCC)
, linux x86_64, если это имеет значение.
EDIT: Он не компилируется с Clang 3.2: clang 3.2
Но это происходит с gcc 4.7.2: gcc 4.7.2