String-Literal entspricht der Bool-Überladung anstelle von std :: string

Ich versuche, eine C ++ - Klasse zu schreiben, die einige überladene Methoden hat:

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

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

Nehmen wir nun an, ich rufe die Methode wie folgt auf:

Output::Print("Hello World");

das ist das Ergebnis

Wahr

Warum verwendet die Methode, wenn ich festgelegt habe, dass sie Boolesche Werte und Zeichenfolgen akzeptieren kann, die Boolesche Überladung, wenn ich einen nicht-booleschen Wert übergebe?

EDIT: Ich komme aus einer C # / Java-Umgebung, also ziemlich neu in C ++!

Antworten auf die Frage(3)

Ihre Antwort auf die Frage