cpp/experimental/ranges/algorithm/for each

@1@ Invokes the given function object to the result of invoking the projection  on dereferencing every iterator in the range  (i.e.,), in order. @2@ Same as, but uses as the source range, as if using  as  and  as.

For both overloads, if the iterator type is mutable, may modify the elements of the range through the dereferenced iterator. If returns a result, the result is ignored.

Unlike the rest of the algorithms, for_each is not allowed to make copies of the elements in the sequence even if they are trivially copyable.

Unlike std (which requires only ), these functions require to model.

Return value
A object containing the following two members:
 * The first member, with the tag, is the past-the-end iterator of the source range (that is, an iterator of type that compares equal to the sentinel ).
 * The second member, with the tag, is initialized from (after all applications of the function object).

Complexity
Exactly -  applications of  and