std::execution::par is an execution-policy object passed as the first argument to parallel overloads of standard algorithms. It permits an implementation to use multiple threads, but does not require it; how work is divided is also implementation-dependent. Parallel overloads usually have less restrictive complexity requirements than their serial counterparts. section 10.1
std::for_each(std::execution::par,v.begin(),v.end(),do_stuff);
Use the policy with an algorithm such as std::for_each to apply an operation across a range; independent work on each element is a straightforward parallel case. section 10.3.1
The operation must still be suitable for the policy. For example, an operation that uses a mutex for synchronization can be used with std::execution::par, but not with std::execution::par_unseq, whose requirements are tighter. The policy also supports larger tasks such as parallel visit counting with std::transform_reduce. section 10.3.1 section 10.3.2
