¿Por qué una clase derivada no puede acceder a un miembro protegido de su clase base a través de un puntero a base?

Este es elcódigo:

class TestA
{
protected:
    int test=12;

public:
    TestA() {
        cout << "test a: " << test << endl;
    }
    ~TestA() {
    }
};

class TestB : public TestA
{   
public:
    TestB(TestA *testA) {
        cout << "test b: " << testA->test;
    }
    ~TestB() {
    }
};

int main ()
{
    TestA *pTestA=new TestA();
    TestB *pTestB=new TestB(pTestA);
}

Estoy tratando de acceder a unprotected miembro utilizando un puntero que apunta a unTestA tipo objeto (por lo tanto, una instancia deTestA)TestB también se deriva deTestA

¿Por qué no puedo acceder a él? ¿Es accesible solo "dentro" de la clase donde lo necesito? No fuera usando puntero / declaraciones directas?

Respuestas a la pregunta(2)

Su respuesta a la pregunta