# std::predicate

From cppreference.com
< cpp‎ | concepts

Defined in header `<concepts>` |  |
template< class F, class... Args > concept predicate = std::regular_invocable<F, Args...> && boolean-testable<std::invoke_result_t<F, Args...>>; |  | (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]

- C++20 standard (ISO/IEC 14882:2020):

  - 18.7.4 Concept `predicate` [concept.predicate]

Retrieved from "https://en.cppreference.com/mwiki/index.php?title=cpp/concepts/predicate&oldid=177899"