*This page is a snapshot from the LWG issues list, see the Library Active Issues List for more information and the meaning of C++14 status.*

### 2039. Issues with `std::reverse` and `std::copy_if`

**Section:** 23.6.1 [alg.copy], 23.6.10 [alg.reverse] **Status:** C++14
**Submitter:** Nikolay Ivchenkov **Opened:** 2011-03-02 **Last modified:** 2016-12-23

**Priority: **Not Prioritized

**View other** active issues in [alg.copy].

**View all other** issues in [alg.copy].

**View all issues with** C++14 status.

**Discussion:**

In the description of `std::reverse`

*Effects*: For each non-negative integer `i <= (last - first)/2`, applies `iter_swap`
to all pairs of iterators `first + i`, `(last - i) - 1`.

should be changed to

*Effects*: For each non-negative integer `i `**<** (last - first)/2, applies `iter_swap`
to all pairs of iterators `first + i`, `(last - i) - 1`.

Here `i` shall be strictly less than `(last - first)/2`.

In the description of `std::copy_if` *Returns* paragraph is missing.

*[2011-03-02: Daniel drafts wording]*

**Proposed resolution:**

Modify 23.6.10 [alg.reverse] p. 1 as indicated:

1 *Effects*: For each non-negative integer `i <`~~=~~ (last - first)/2, applies `iter_swap`
to all pairs of iterators `first + i`, `(last - i) - 1`.

Add the following *Returns* element after 23.6.1 [alg.copy] p. 9:

template<class InputIterator, class OutputIterator, class Predicate>
OutputIterator copy_if(InputIterator first, InputIterator last,
OutputIterator result, Predicate pred);

8 *Requires*: The ranges `[first,last)` and `[result,result + (last - first))` shall not overlap.

9 *Effects*: Copies all of the elements referred to by the iterator `i` in the range `[first,last)`
for which `pred(*i)` is true.

?? *Returns*: The end of the resulting range.

10 *Complexity*: Exactly `last - first` applications of the corresponding predicate.

11 *Remarks*: Stable.