std::predicate (since C++20)
From cppreference.com
                    
                                        
                    
                    
                                                            
                    | Defined in header  <concepts> | ||
| template< class F, class... Args > concept predicate = | (since C++20) | |
The concept std::predicate<F, Args...> specifies that F is a predicate that accepts arguments whose types and value categories are encoded by Args..., i.e., it can be invoked with these arguments to produce a boolean-testable result.
Note that regular_invocable requires the invocation to not modify either the callable object or the arguments and be equality-preserving.
Equality preservation
Expressions declared in requires expressions of the standard library concepts are required to be equality-preserving (except where stated otherwise).
References
- C++23 standard (ISO/IEC 14882:2024):
-  18.7.4 Concept predicate[concept.predicate]
 
-  18.7.4 Concept 
- C++20 standard (ISO/IEC 14882:2020):
-  18.7.4 Concept predicate[concept.predicate]
 
-  18.7.4 Concept