String literal corresponde à sobrecarga de bool em vez de std :: string

Eu estou tentando escrever uma classe de C ++ que tenha alguns métodos sobrecarregados:

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

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

Agora vamos dizer que eu chamo o método da seguinte forma:

Output::Print("Hello World");

esse é o resultado

Verdade

Então, por que, quando eu defini que o método pode aceitar booleano e string, ele usa a sobrecarga booleana quando eu passo um valor não-booleano?

EDIT: eu venho de um ambiente C # / Java, então muito novo para C ++!

questionAnswers(3)

yourAnswerToTheQuestion