Почему класс D
компилируется, но класс C
не работает?
class A
{
public:
A(int) {}
};
template <class T>
class B : private T // Note: private base class
{
public:
using T::T;
};
class C : public B<A>
{
public:
C() : B<A>(123) {} // Error: 'class A A::A' is inaccessible
}; // within this context
using BA = B<A>;
class D : public BA
{
public:
D() : BA(123) {} // OK
};
Я тестировал GCC, Clang и Visual С++, и они все одинаковы.
Изменение class B : private T
до public T
решает проблему. Но почему? (Обратите внимание, что using T::T
- public
.)