I'll be all for this idea iff the value_type of the iterator passed to these functions is verified to be precisely of type bool, rather than the looser "convertible to bool" requirement of the predicate return type in the current function definitions, following the principle of least astonishment.

Consider a container holding elements of type T, where T is convertible to bool. I use std::any_of over that container and accidently miss out the predicate, which is intended as, say, a bounds check. Without warning or error, my code compiles and I get unwanted results.