Acceder al nombre de una clase privada heredada de una subclase

El siguiente código no se compila con este error con g ++ y un error similar con clang.

main.cpp:16:19: error: 'QByteArray' is a private member of 'QByteArray'
        Container2(const QByteArray &ba);
                         ^
main.cpp:3:18: note: constrained by private inheritance here
class Container1:private QByteArray
                 ^~~~~~~~~~~~~~~~~~
../edge-clang/qt5/include/QtCore/qbytearray.h:167:21: note: member is declared here
class Q_CORE_EXPORT QByteArray
                    ^
main.cpp:18:30: error: 'QByteArray' is a private member of 'QByteArray'
Container2::Container2(const QByteArray &ba):Container1(ba){}
                             ^
main.cpp:3:18: note: constrained by private inheritance here
class Container1:private QByteArray
                 ^~~~~~~~~~~~~~~~~~
../edge-clang/qt5/include/QtCore/qbytearray.h:167:21: note: member is declared here
class Q_CORE_EXPORT QByteArray
                    ^

No entiendo por qué esto no está permitido para Container2 heredar Container1 e inicializarlo a través de un constructor público, a pesar de que la herencia de QByteArray es privada.

#include <QByteArray>

class Container1:private QByteArray
{
public: 
    Container1() {}
    Container1(const QByteArray &ba);
};

Container1::Container1(const QByteArray &ba):QByteArray(ba){}

class Container2:public Container1
{
public:
    Container2() {}
    Container2(const QByteArray &ba);
};
Container2::Container2(const QByteArray &ba):Container1(ba){}

int main(int argc,char *argv[])
{
    QByteArray ba;
    Container1 c1(ba);
    Container2 c2(ba);
}

Respuestas a la pregunta(1)

Su respuesta a la pregunta