В error_code.hpp
вы можете найти это определение:
class error_code
{
...
typedef void (*unspecified_bool_type)();
static void unspecified_bool_true() {}
operator unspecified_bool_type() const // true if error
{
return m_val == 0 ? 0 : unspecified_bool_true;
}
bool operator!() const // true if no error
{
return m_val == 0;
}
...
}
Если вы используете что-то вроде этого:
if (!ec) {
// no error
}
вы получаете правильное поведение, я надеюсь, что оно понятноКогда вы вызываете это:
if (ec) {
// error
}
вы на самом деле вызываете operator unspecified_bool_type()
, потому что он возвращает указатель (на функцию), который можно преобразовать в bool.Если есть ошибка, он возвращает указатель на unspecified_bool_true
, который не является нулевым.Поэтому он работает правильно и не решит проблему.