Boost.Bind перегружает реляционные операторы для возврата вложенных выражений связывания.Таким образом, в вашем коде boost::bind(func, 1) == boost::bind(func, 1)
возвращает нулевой (поскольку в выражениях связывания нет заполнителей) функтор, который при вызове возвращает func(1) == func(1)
.Это удобная функция для предикатов, среди прочего:
typeded std::pair<T, U> pair_type;
// find pair where the first element is equal to 3
std::find_if(begin, end, boost::bind(&pair_type::first, _1) == 3);
Кроме того, возвращаемый объект не может быть преобразован в bool
, и именно поэтому он не будет компилироваться (не учитывая проблему, с которой он не связан).делать то, что вы хотите).
То, что вы хотите сделать, не является частью интерфейса Boost.Bind.Tt не будет очень полезной функцией и в (очень) общем случае будет неразрешимой .