`std::find_if` takes a predicate in one of it's overloaded function. Binders make it possible to write EqualityComparators for user-defined types and use them either for dynamic comparison or static comparison.

In contrast the binary search functions of the standard library take a comparator and a `const T&` to the value that should be used for comparison. This feels inconsistent to me and could possibly more inefficient as the comparator has to be called with both arguments every time instead of having the constant argument bound to it. While it could be possible to implement `std::binary_search` in a way to use `std::bind` this would require all comparators to inherit from `std::binary_function`. Most code I've seen doesn't do that. 

Is there a possible benefit from letting comparators inherit from `std::binary_function` when using it with algorithms that take a `const T&` as a value instead of letting me use the binders? Is there a reason for not providing predicate overloads in those functions?