Por que há uma conversão implícita de tipo de ponteiros para bool no C ++?

Considere a classefoo com dois construtores definidos assim:

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;}
};

Instanciar a classe com uma string literal e adivinhar qual construtor é chamado?

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

Resultado:

Ctor 2

Não sei você, mas não acho esse o comportamento mais intuitivo da história da programação. Aposto que há alguma razão inteligente para isso, e gostaria de saber o que pode ser?

questionAnswers(3)

yourAnswerToTheQuestion