El literal de la cadena coincide con la sobrecarga de Bool en lugar de std :: string

Estoy intentando escribir una clase de C ++ que tiene algunos métodos sobrecargados:

class Output
{
public:
    static void Print(bool value)
    {
        std::cout << value ? "True" : "False";
    }

    static void Print(std::string value)
    {
        std::cout << value;
    }
};

Ahora digamos que llamo al método como sigue:

Output::Print("Hello World");

este es el resultado

Cierto

Entonces, ¿por qué, cuando he definido que el método puede aceptar booleano y cadena, utiliza la sobrecarga booleana cuando paso un valor no booleano?

EDITAR: vengo de un entorno C # / Java, por lo que es bastante nuevo para C ++!

Respuestas a la pregunta(3)

Su respuesta a la pregunta