Рассмотрим следующий код.
#include <functional>
int main(void)
{
std::function<void()> f1;
if (f1) { /* ok */
...
}
bool b = f1; /* compile-error */
bool B = !f1; /* ok */
...
}
std::function<>
неявно преобразуется в bool в некоторых случаях, но не во всех. Присвоение его bool
-переменной не работает, тогда как результат операции или его использование в if()
-операторе в порядке.
Почему это так? Кажется, мы должны выполнить над ним логическую операцию, тогда преобразование сработает.
Что я сделал, чтобы заставить работать линию b = f1
, так это старый добрый двойной удар: !!
. В таком современном C++-коде это выглядит антиквариатом.
EDIT: это также компилируется:
bool b = f1 || f1; /* OK */
bool b{f1};
иbool b(f1);
работают. - person Quentin   schedule 20.09.2016