Строковый литерал соответствует перегрузке bool вместо std :: string

Я пытаюсь написать класс C ++, который имеет несколько перегруженных методов:

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

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

Теперь допустим, что я вызываю метод следующим образом:

Output::Print("Hello World");

это результат

Правда

Итак, почему, когда я определил, что метод может принимать логическое значение и строку, он использует логическую перегрузку, когда я передаю не логическое значение?

РЕДАКТИРОВАТЬ: Я пришел из среды C # / Java, так что совершенно новый для C ++!