From Jason Turner

[reverse.iterator]

Diff to HTML by rtfpessoa

Files changed (1) hide show
  1. tmp/tmpwt2l7f_p/{from.md → to.md} +28 -42
tmp/tmpwt2l7f_p/{from.md → to.md} RENAMED
@@ -4,24 +4,25 @@
4
  namespace std {
5
  template<class Iterator>
6
  class reverse_iterator {
7
  public:
8
  using iterator_type = Iterator;
9
- using iterator_category = typename iterator_traits<Iterator>::iterator_category;
10
- using value_type = typename iterator_traits<Iterator>::value_type;
11
- using difference_type = typename iterator_traits<Iterator>::difference_type;
 
12
  using pointer = typename iterator_traits<Iterator>::pointer;
13
- using reference = typename iterator_traits<Iterator>::reference;
14
 
15
  constexpr reverse_iterator();
16
  constexpr explicit reverse_iterator(Iterator x);
17
  template<class U> constexpr reverse_iterator(const reverse_iterator<U>& u);
18
  template<class U> constexpr reverse_iterator& operator=(const reverse_iterator<U>& u);
19
 
20
- constexpr Iterator base() const; // explicit
21
  constexpr reference operator*() const;
22
- constexpr pointer operator->() const;
23
 
24
  constexpr reverse_iterator& operator++();
25
  constexpr reverse_iterator operator++(int);
26
  constexpr reverse_iterator& operator--();
27
  constexpr reverse_iterator operator--(int);
@@ -29,47 +30,32 @@ namespace std {
29
  constexpr reverse_iterator operator+ (difference_type n) const;
30
  constexpr reverse_iterator& operator+=(difference_type n);
31
  constexpr reverse_iterator operator- (difference_type n) const;
32
  constexpr reverse_iterator& operator-=(difference_type n);
33
  constexpr unspecified operator[](difference_type n) const;
 
 
 
 
 
 
 
 
34
  protected:
35
  Iterator current;
36
  };
37
-
38
- template <class Iterator1, class Iterator2>
39
- constexpr bool operator==(
40
- const reverse_iterator<Iterator1>& x,
41
- const reverse_iterator<Iterator2>& y);
42
- template <class Iterator1, class Iterator2>
43
- constexpr bool operator<(
44
- const reverse_iterator<Iterator1>& x,
45
- const reverse_iterator<Iterator2>& y);
46
- template <class Iterator1, class Iterator2>
47
- constexpr bool operator!=(
48
- const reverse_iterator<Iterator1>& x,
49
- const reverse_iterator<Iterator2>& y);
50
- template <class Iterator1, class Iterator2>
51
- constexpr bool operator>(
52
- const reverse_iterator<Iterator1>& x,
53
- const reverse_iterator<Iterator2>& y);
54
- template <class Iterator1, class Iterator2>
55
- constexpr bool operator>=(
56
- const reverse_iterator<Iterator1>& x,
57
- const reverse_iterator<Iterator2>& y);
58
- template <class Iterator1, class Iterator2>
59
- constexpr bool operator<=(
60
- const reverse_iterator<Iterator1>& x,
61
- const reverse_iterator<Iterator2>& y);
62
- template <class Iterator1, class Iterator2>
63
- constexpr auto operator-(
64
- const reverse_iterator<Iterator1>& x,
65
- const reverse_iterator<Iterator2>& y) -> decltype(y.base() - x.base());
66
- template <class Iterator>
67
- constexpr reverse_iterator<Iterator> operator+(
68
- typename reverse_iterator<Iterator>::difference_type n,
69
- const reverse_iterator<Iterator>& x);
70
-
71
- template <class Iterator>
72
- constexpr reverse_iterator<Iterator> make_reverse_iterator(Iterator i);
73
  }
74
  ```
75
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
4
  namespace std {
5
  template<class Iterator>
6
  class reverse_iterator {
7
  public:
8
  using iterator_type = Iterator;
9
+ using iterator_concept = see below;
10
+ using iterator_category = see below;
11
+ using value_type = iter_value_t<Iterator>;
12
+ using difference_type = iter_difference_t<Iterator>;
13
  using pointer = typename iterator_traits<Iterator>::pointer;
14
+ using reference = iter_reference_t<Iterator>;
15
 
16
  constexpr reverse_iterator();
17
  constexpr explicit reverse_iterator(Iterator x);
18
  template<class U> constexpr reverse_iterator(const reverse_iterator<U>& u);
19
  template<class U> constexpr reverse_iterator& operator=(const reverse_iterator<U>& u);
20
 
21
+ constexpr Iterator base() const;
22
  constexpr reference operator*() const;
23
+ constexpr pointer operator->() const requires see below;
24
 
25
  constexpr reverse_iterator& operator++();
26
  constexpr reverse_iterator operator++(int);
27
  constexpr reverse_iterator& operator--();
28
  constexpr reverse_iterator operator--(int);
 
30
  constexpr reverse_iterator operator+ (difference_type n) const;
31
  constexpr reverse_iterator& operator+=(difference_type n);
32
  constexpr reverse_iterator operator- (difference_type n) const;
33
  constexpr reverse_iterator& operator-=(difference_type n);
34
  constexpr unspecified operator[](difference_type n) const;
35
+
36
+ friend constexpr iter_rvalue_reference_t<Iterator>
37
+ iter_move(const reverse_iterator& i) noexcept(see below);
38
+ template<indirectly_swappable<Iterator> Iterator2>
39
+ friend constexpr void
40
+ iter_swap(const reverse_iterator& x,
41
+ const reverse_iterator<Iterator2>& y) noexcept(see below);
42
+
43
  protected:
44
  Iterator current;
45
  };
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
46
  }
47
  ```
48
 
49
+ The member *typedef-name* `iterator_concept` denotes
50
+
51
+ - `random_access_iterator_tag` if `Iterator` models
52
+ `random_access_iterator`, and
53
+ - `bidirectional_iterator_tag` otherwise.
54
+
55
+ The member *typedef-name* `iterator_category` denotes
56
+
57
+ - `random_access_iterator_tag` if the type
58
+ `iterator_traits<{}Iterator>::iterator_category` models
59
+ `derived_from<random_access_iterator_tag>`, and
60
+ - `iterator_traits<{}Iterator>::iterator_category` otherwise.
61
+