26 Algorithms library [algorithms]

26.3 Parallel algorithms [algorithms.parallel]

26.3.2 Requirements on user-provided function objects [algorithms.parallel.user]

Unless otherwise specified, invocable objects passed into parallel algorithms as objects of a type denoted by a template parameter named Predicate, BinaryPredicate, Compare, UnaryOperation, BinaryOperation, BinaryOperation1, BinaryOperation2, BinaryDivideOp, or constrained by a concept that subsumes regular_invocable and the operators used by the analogous overloads to these parallel algorithms that are formed by an invocation with the specified default predicate or operation (where applicable) shall not directly or indirectly modify objects via their arguments, nor shall they rely on the identity of the provided objects.