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.

2285. make_reverse_iterator

Section: 25.5.1 [reverse.iterators] Status: C++14 Submitter: Zhihao Yuan Opened: 2013-08-27 Last modified: 2016-01-28

Priority: Not Prioritized

View all other issues in [reverse.iterators].

View all issues with C++14 status.

Discussion:

We have make_move_iterator, but not make_reverse_iterator, which is also useful when dealing with some types without an rbegin/rend support (like, C strings).

[2013-09 Chicago]

Billy: reviewed it last night STL: has suggested prior, but denied for complexity

Billy: Alisdair wanted to review for reverse(reverse());

STL: likes the issue, was like him

Stefanus: likes definitions, places where things should be

STL: for consistency with make_move_iterator

Stefanus: minor editorial issue - subdivision in these 2 sections is different from [move.iter]. See 25.5.4.9 [move.iter.nonmember]

STL: motion to move to Ready

Move to Ready

Proposed resolution:

This wording is relative to N3691.

  1. Change header <iterator> synopsis, 25.2 [iterator.synopsis] as indicated:

    namespace std {
      […]
      template <class Iterator>
        reverse_iterator<Iterator> operator+(
          typename reverse_iterator<Iterator>::difference_type n,
          const reverse_iterator<Iterator>& x);
    
      template <class Iterator>
        reverse_iterator<Iterator> make_reverse_iterator(Iterator i);
    
    }
    
  2. Change class template reverse_iterator synopsis, 25.5.1.2 [reverse.iterator] as indicated:

    namespace std {
      […]
      template <class Iterator>
        reverse_iterator<Iterator> operator+(
          typename reverse_iterator<Iterator>::difference_type n,
          const reverse_iterator<Iterator>& x);
    
      template <class Iterator>
        reverse_iterator<Iterator> make_reverse_iterator(Iterator i);
    
    }
    
  3. After [reverse.iter.opsum] add the following new sub-clause to [reverse.iter.ops]:

    
    template <class Iterator>
      reverse_iterator<Iterator> make_reverse_iterator(Iterator i);
    
    

    -?- Returns: reverse_iterator<Iterator>(i).