Se deriva el método privado de la clase derivada

Tengo un puntero de clase base que apunta al objeto de clase derivado. El método foo () es público en la clase base pero privado en la clase derivada. La clase base foo () es virtual. Entonces, cuando llamo a foo () desde el puntero de la clase Base, la tabla Vptr tiene la dirección de la clase derivada foo (), PERO es privado en la clase Derivada ... entonces, ¿cómo se llama?

Entiendo el polimorfismo del tiempo de ejecución y también entiendo que los especificadores de acceso funcionan durante el tiempo de compilación y el concepto virtual funciona en tiempo de ejecución. Así que no habrá error de compilación.

Mi pregunta es: ¿Es este un agujero de bucle a través del cual podemos llamar métodos privados de clase Derivada? o se espera que se comporte de esta manera. Cualquier buena explicación para este comportamiento.

Muchas gracias por adelantado.

CÓDIGO:

class A
{
public:
    virtual void foo()
    {
        std::cout << "In A";
    }
};


class B:public A
{
private:
    void foo()
    {
       std::cout << "In B ??? Its Private Method :-( ";
    }
};

int main()
{
    A* ptr = new B();
    ptr->foo();
    return 0;
}

Respuestas a la pregunta(2)

Su respuesta a la pregunta