Cuáles son las reglas para la búsqueda de funciones virtuales?

#include <iostream>
class base
{
    public:
    virtual void print (int a)
    {   
        std::cout << "a: " << a << " base\n";
    }   
    virtual void print (int a, int b)
    {   
        std::cout << "base\n";
    }   
};

class derived : public base
{
    public:
    virtual void print (double d)
    {   
        std::cout << "derived\n";
    }   
};

int main ()
{
    int i = 10; 
    double d = 10000.0;
    base *b = new derived (); 
    b->print (i, i); 
    b->print (d);

    return 0;
}

La salida de esta función es:

base
a: 10000 base
Por québ->print (d) no invoque la implementación de la clase derivada y realiza una conversión estática en'd' para proporcionar una coincidencia con la implementación de la clase base? ¿Qué regla se aplica aquí durante la búsqueda de funciones virtuales?

Respuestas a la pregunta(3)

Su respuesta a la pregunta