Почему в C ++ происходит неявное преобразование типов из указателей в bool?

Рассмотрим классfoo с двумя конструкторами, определенными так:

class foo
{
public:
    foo(const std::string& filename) {std::cout << "ctor 1" << std::endl;}
    foo(const bool some_flag = false) {std::cout << "ctor 2" << std::endl;}
};

Создайте экземпляр класса со строковым литералом и угадайте, какой конструктор называется?

foo a ("/path/to/file");

Выход:

Ctor 2

Я не знаю о вас, но я не считаю, что наиболее интуитивное поведение в истории программирования. Могу поспорить, что есть какая-то умная причина для этого, и я хотел бы знать, что это может быть?

Ответы на вопрос(3)

Ваш ответ на вопрос