C++ concepts: BinaryPredicate
From cppreference.com
                    
                                        
                    
                    
                                                            
                    The concept BinaryPredicate is a set of requirements expected by some of the standard library facilities from the user-provided arguments.
Given a BinaryPredicate bin_pred and a pair of iterators iter1 and iter2 or an iterator iter and a value value, the expression  bin_pred(*iter1, *iter2) or, respectively, bin_pred(*iter, value), must be contextually convertible to bool.
In addition, evaluation of that expression is not allowed to call non-const member functions of the dereferenced iterators.
[edit] Requirements
-  
Predicate -  
CopyConstructible(unless otherwise specified) 
[edit] Standard library
The following standard library facilities expect a BinaryPredicate which isn't a Compare type.
|    removes consecutive duplicate elements  (public member function of std::forward_list) 
 | 
|
|    removes consecutive duplicate elements  (public member function of std::list) 
 | 
|
|    finds the last sequence of elements in a certain range   (function template)  | 
|
|    searches for any one of a set of elements   (function template)  | 
|
|    finds the first two adjacent items that are equal (or satisfy a given predicate)   (function template)  | 
|
|    finds the first position where two ranges differ   (function template)  | 
|
|    determines if two sets of elements are the same   (function template)  | 
|
|    (C++11) 
 | 
   determines if a sequence is a permutation of another sequence   (function template)  | 
|    searches for a range of elements   (function template)  | 
|
|    searches for a number consecutive copies of an element in a range   (function template)  | 
|
|    removes consecutive duplicate elements in a range   (function template)  | 
|
|    creates a copy of some range of elements that contains no consecutive duplicates   (function template)  | 
|
|    constructs custom std::binary_negate object   (function template)  | 
|
|    (since C++11) 
 | 
   collection of unique keys, hashed by keys   (class template)  | 
|    (since C++11) 
 | 
   collection of key-value pairs, hashed by keys, keys are unique   (class template)  | 
|    (since C++11) 
 | 
   collection of keys, hashed by keys   (class template)  | 
|    (since C++11) 
 | 
   collection of key-value pairs, hashed by keys   (class template)  |