Literał łańcuchowy dopasowuje przeciążenie bool zamiast std :: string

Próbuję napisać klasę C ++, która ma kilka przeciążonych metod:

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

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

Powiedzmy, że nazywam tę metodę w następujący sposób:

Output::Print("Hello World");

to jest wynik

Prawdziwe

Dlaczego więc, gdy zdefiniowałem, że metoda może przyjmować wartości logiczne i łańcuchowe, czy używa przeciążenia boolowskiego, gdy przekazuję wartość nie-boolowską?

EDYCJA: Pochodzę ze środowiska C # / Java, więc całkiem nowy w C ++!

questionAnswers(3)

yourAnswerToTheQuestion