Pourquoi ne classe D
de la compilation, mais la classe C
ne l'est pas?
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
};
J'ai testé avec GCC, Clang et Visual C++, et ils sont tous les mêmes.
Évolution class B : private T
de public T
résout le problème. Mais pourquoi? (Notez que l' using T::T
est public
.)