C++ named requirements: Predicate

From cppreference.com
C++ named requirements

The Predicate requirements describe a callable that returns a BooleanTestable value.

Predicate is typically used with algorithms that take input data (individual objects/containers) and a predicate, which is then called on input data to decide on further course of action. Some examples of predicate usage in C++ standard library are:

  • std::all_of , std::any_of , std::none_of Take an array of elements and a predicate as an input. Call predicate on individual input elements, and return true if for all/any/none elements, predicate returns true.
  • std::find_if Take sequence of elements, and a predicate. Return first element in the sequence, for which predicate returns value equal to true .

Description of algorithm facilities, given above, is crude and intended to explain Predicate in simple terms. For detailed info, refer to individual pages.

In other words, if an algorithm takes a Predicate pred and an iterator first , it should be able to test the object of the type pointed to by the iterator first using the given predicate via a construct like if ( pred ( * first ) ) { /*...*/ } .

The function object pred shall not apply any non-constant function through the dereferenced iterator and must accept a const argument, with the same behavior regardless of whether the argument is const or non- const . This function object may be a pointer to function or an object of a type with an appropriate function call operator.

Requirements

Defect reports

The following behavior-changing defect reports were applied retroactively to previously published C++ standards.

DR Applied to Behavior as published Correct behavior
LWG 3031 C++98 requirements on const values were insufficent requirements strengthened

See also

(C++20)
specifies that a callable type is a Boolean predicate
(concept)