From Jason Turner

[reverse.iterators]

Diff to HTML by rtfpessoa

Files changed (1) hide show
  1. tmp/tmp9jf29wio/{from.md → to.md} +17 -13
tmp/tmp9jf29wio/{from.md → to.md} RENAMED
@@ -42,12 +42,10 @@ namespace std {
42
  reverse_iterator operator- (difference_type n) const;
43
  reverse_iterator& operator-=(difference_type n);
44
  unspecified operator[](difference_type n) const;
45
  protected:
46
  Iterator current;
47
- private:
48
- Iterator deref_tmp; // exposition only
49
  };
50
 
51
  template <class Iterator1, class Iterator2>
52
  bool operator==(
53
  const reverse_iterator<Iterator1>& x,
@@ -73,15 +71,18 @@ namespace std {
73
  const reverse_iterator<Iterator1>& x,
74
  const reverse_iterator<Iterator2>& y);
75
  template <class Iterator1, class Iterator2>
76
  auto operator-(
77
  const reverse_iterator<Iterator1>& x,
78
- const reverse_iterator<Iterator2>& y) -> decltype(y.current - x.current);
79
  template <class Iterator>
80
  reverse_iterator<Iterator> operator+(
81
  typename reverse_iterator<Iterator>::difference_type n,
82
  const reverse_iterator<Iterator>& x);
 
 
 
83
  }
84
  ```
85
 
86
  #### `reverse_iterator` requirements <a id="reverse.iter.requirements">[[reverse.iter.requirements]]</a>
87
 
@@ -152,27 +153,21 @@ reference operator*() const;
152
  ```
153
 
154
  *Effects:*
155
 
156
  ``` cpp
157
- deref_tmp = current;
158
- --deref_tmp;
159
- return *deref_tmp;
160
  ```
161
 
162
- This operation must use an auxiliary member variable rather than a
163
- temporary variable to avoid returning a reference that persists beyond
164
- the lifetime of its associated iterator.
165
- (See  [[iterator.requirements]].)
166
-
167
  ##### `operator->` <a id="reverse.iter.opref">[[reverse.iter.opref]]</a>
168
 
169
  ``` cpp
170
  pointer operator->() const;
171
  ```
172
 
173
- *Returns:* `&(operator*())`.
174
 
175
  ##### `operator++` <a id="reverse.iter.op++">[[reverse.iter.op++]]</a>
176
 
177
  ``` cpp
178
  reverse_iterator& operator++();
@@ -335,11 +330,11 @@ template <class Iterator1, class Iterator2>
335
 
336
  ``` cpp
337
  template <class Iterator1, class Iterator2>
338
  auto operator-(
339
  const reverse_iterator<Iterator1>& x,
340
- const reverse_iterator<Iterator2>& y) -> decltype(y.current - x.current);
341
  ```
342
 
343
  *Returns:* `y.current - x.current`.
344
 
345
  ##### `operator+` <a id="reverse.iter.opsum">[[reverse.iter.opsum]]</a>
@@ -351,5 +346,14 @@ template <class Iterator>
351
  const reverse_iterator<Iterator>& x);
352
  ```
353
 
354
  *Returns:* `reverse_iterator<Iterator> (x.current - n)`.
355
 
 
 
 
 
 
 
 
 
 
 
42
  reverse_iterator operator- (difference_type n) const;
43
  reverse_iterator& operator-=(difference_type n);
44
  unspecified operator[](difference_type n) const;
45
  protected:
46
  Iterator current;
 
 
47
  };
48
 
49
  template <class Iterator1, class Iterator2>
50
  bool operator==(
51
  const reverse_iterator<Iterator1>& x,
 
71
  const reverse_iterator<Iterator1>& x,
72
  const reverse_iterator<Iterator2>& y);
73
  template <class Iterator1, class Iterator2>
74
  auto operator-(
75
  const reverse_iterator<Iterator1>& x,
76
+ const reverse_iterator<Iterator2>& y) -> decltype(y.base() - x.base());
77
  template <class Iterator>
78
  reverse_iterator<Iterator> operator+(
79
  typename reverse_iterator<Iterator>::difference_type n,
80
  const reverse_iterator<Iterator>& x);
81
+
82
+ template <class Iterator>
83
+ reverse_iterator<Iterator> make_reverse_iterator(Iterator i);
84
  }
85
  ```
86
 
87
  #### `reverse_iterator` requirements <a id="reverse.iter.requirements">[[reverse.iter.requirements]]</a>
88
 
 
153
  ```
154
 
155
  *Effects:*
156
 
157
  ``` cpp
158
+ Iterator tmp = current;
159
+ return *--tmp;
 
160
  ```
161
 
 
 
 
 
 
162
  ##### `operator->` <a id="reverse.iter.opref">[[reverse.iter.opref]]</a>
163
 
164
  ``` cpp
165
  pointer operator->() const;
166
  ```
167
 
168
+ *Returns:* `std::addressof(operator*())`.
169
 
170
  ##### `operator++` <a id="reverse.iter.op++">[[reverse.iter.op++]]</a>
171
 
172
  ``` cpp
173
  reverse_iterator& operator++();
 
330
 
331
  ``` cpp
332
  template <class Iterator1, class Iterator2>
333
  auto operator-(
334
  const reverse_iterator<Iterator1>& x,
335
+ const reverse_iterator<Iterator2>& y) -> decltype(y.base() - x.base());
336
  ```
337
 
338
  *Returns:* `y.current - x.current`.
339
 
340
  ##### `operator+` <a id="reverse.iter.opsum">[[reverse.iter.opsum]]</a>
 
346
  const reverse_iterator<Iterator>& x);
347
  ```
348
 
349
  *Returns:* `reverse_iterator<Iterator> (x.current - n)`.
350
 
351
+ ##### Non-member function `make_reverse_iterator()` <a id="reverse.iter.make">[[reverse.iter.make]]</a>
352
+
353
+ ``` cpp
354
+ template <class Iterator>
355
+ reverse_iterator<Iterator> make_reverse_iterator(Iterator i);
356
+ ```
357
+
358
+ *Returns:* `reverse_iterator<Iterator>(i)`.
359
+