From Jason Turner

[reverse.iterators]

Diff to HTML by rtfpessoa

Files changed (1) hide show
  1. tmp/tmpb98v2f9f/{from.md → to.md} +69 -77
tmp/tmpb98v2f9f/{from.md → to.md} RENAMED
@@ -9,94 +9,91 @@ identity: `&*(reverse_iterator(i)) == &*(i - 1)`.
9
  #### Class template `reverse_iterator` <a id="reverse.iterator">[[reverse.iterator]]</a>
10
 
11
  ``` cpp
12
  namespace std {
13
  template <class Iterator>
14
- class reverse_iterator : public
15
- iterator<typename iterator_traits<Iterator>::iterator_category,
16
- typename iterator_traits<Iterator>::value_type,
17
- typename iterator_traits<Iterator>::difference_type,
18
- typename iterator_traits<Iterator>::pointer,
19
- typename iterator_traits<Iterator>::reference> {
20
  public:
21
- typedef Iterator iterator_type;
22
- typedef typename iterator_traits<Iterator>::difference_type difference_type;
23
- typedef typename iterator_traits<Iterator>::reference reference;
24
- typedef typename iterator_traits<Iterator>::pointer pointer;
 
 
25
 
26
- reverse_iterator();
27
- explicit reverse_iterator(Iterator x);
28
- template <class U> reverse_iterator(const reverse_iterator<U>& u);
29
- template <class U> reverse_iterator& operator=(const reverse_iterator<U>& u);
30
 
31
- Iterator base() const; // explicit
32
- reference operator*() const;
33
- pointer operator->() const;
34
 
35
- reverse_iterator& operator++();
36
- reverse_iterator operator++(int);
37
- reverse_iterator& operator--();
38
- reverse_iterator operator--(int);
39
 
40
- reverse_iterator operator+ (difference_type n) const;
41
- reverse_iterator& operator+=(difference_type n);
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,
52
  const reverse_iterator<Iterator2>& y);
53
  template <class Iterator1, class Iterator2>
54
- bool operator<(
55
  const reverse_iterator<Iterator1>& x,
56
  const reverse_iterator<Iterator2>& y);
57
  template <class Iterator1, class Iterator2>
58
- bool operator!=(
59
  const reverse_iterator<Iterator1>& x,
60
  const reverse_iterator<Iterator2>& y);
61
  template <class Iterator1, class Iterator2>
62
- bool operator>(
63
  const reverse_iterator<Iterator1>& x,
64
  const reverse_iterator<Iterator2>& y);
65
  template <class Iterator1, class Iterator2>
66
- bool operator>=(
67
  const reverse_iterator<Iterator1>& x,
68
  const reverse_iterator<Iterator2>& y);
69
  template <class Iterator1, class Iterator2>
70
- bool operator<=(
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
 
89
  The template parameter `Iterator` shall meet all the requirements of a
90
  Bidirectional Iterator ([[bidirectional.iterators]]).
91
 
92
- Additionally, `Iterator` shall meet the requirements of a Random Access
93
- Iterator ([[random.access.iterators]]) if any of the members
94
  `operator+` ([[reverse.iter.op+]]), `operator-` (
95
  [[reverse.iter.op-]]), `operator+=` ([[reverse.iter.op+=]]),
96
  `operator-=` ([[reverse.iter.op-=]]), `operator[]` (
97
- [[reverse.iter.opindex]]), or the global operators `operator<` (
98
  [[reverse.iter.op<]]), `operator>` ([[reverse.iter.op>]]),
99
  `operator<=` ([[reverse.iter.op<=]]), `operator>=` (
100
  [[reverse.iter.op>=]]), `operator-` ([[reverse.iter.opdiff]]) or
101
  `operator+` ([[reverse.iter.opsum]]) are referenced in a way that
102
  requires instantiation ([[temp.inst]]).
@@ -104,256 +101,251 @@ requires instantiation ([[temp.inst]]).
104
  #### `reverse_iterator` operations <a id="reverse.iter.ops">[[reverse.iter.ops]]</a>
105
 
106
  ##### `reverse_iterator` constructor <a id="reverse.iter.cons">[[reverse.iter.cons]]</a>
107
 
108
  ``` cpp
109
- reverse_iterator();
110
  ```
111
 
112
- *Effects:* Value initializes `current`. Iterator operations applied to
113
  the resulting iterator have defined behavior if and only if the
114
  corresponding operations are defined on a value-initialized iterator of
115
  type `Iterator`.
116
 
117
  ``` cpp
118
- explicit reverse_iterator(Iterator x);
119
  ```
120
 
121
  *Effects:* Initializes `current` with `x`.
122
 
123
  ``` cpp
124
- template <class U> reverse_iterator(const reverse_iterator<U> &u);
125
  ```
126
 
127
  *Effects:* Initializes `current` with `u.current`.
128
 
129
  ##### `reverse_iterator::operator=` <a id="reverse.iter.op=">[[reverse.iter.op=]]</a>
130
 
131
  ``` cpp
132
  template <class U>
133
- reverse_iterator&
134
  operator=(const reverse_iterator<U>& u);
135
  ```
136
 
137
  *Effects:* Assigns `u.base()` to current.
138
 
139
  *Returns:* `*this`.
140
 
141
  ##### Conversion <a id="reverse.iter.conv">[[reverse.iter.conv]]</a>
142
 
143
  ``` cpp
144
- Iterator base() const; // explicit
145
  ```
146
 
147
  *Returns:* `current`.
148
 
149
  ##### `operator*` <a id="reverse.iter.op.star">[[reverse.iter.op.star]]</a>
150
 
151
  ``` cpp
152
- reference operator*() const;
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++();
174
  ```
175
 
176
- *Effects:* `current;`
177
 
178
  *Returns:* `*this`.
179
 
180
  ``` cpp
181
- reverse_iterator operator++(int);
182
  ```
183
 
184
- *Effects:*
185
 
186
  ``` cpp
187
  reverse_iterator tmp = *this;
188
  --current;
189
  return tmp;
190
  ```
191
 
192
  \[reverse.iter.op\]`operator\dcr`
193
 
194
  ``` cpp
195
- reverse_iterator& operator--();
196
  ```
197
 
198
- *Effects:* `++current`
199
 
200
  *Returns:* `*this`.
201
 
202
  ``` cpp
203
- reverse_iterator operator--(int);
204
  ```
205
 
206
- *Effects:*
207
 
208
  ``` cpp
209
  reverse_iterator tmp = *this;
210
  ++current;
211
  return tmp;
212
  ```
213
 
214
  ##### `operator+` <a id="reverse.iter.op+">[[reverse.iter.op+]]</a>
215
 
216
  ``` cpp
217
- reverse_iterator
218
- operator+(typename reverse_iterator<Iterator>::difference_type n) const;
219
  ```
220
 
221
  *Returns:* `reverse_iterator(current-n)`.
222
 
223
  ##### `operator+=` <a id="reverse.iter.op+=">[[reverse.iter.op+=]]</a>
224
 
225
  ``` cpp
226
- reverse_iterator&
227
- operator+=(typename reverse_iterator<Iterator>::difference_type n);
228
  ```
229
 
230
- *Effects:* `current -= n;`
231
 
232
  *Returns:* `*this`.
233
 
234
  ##### `operator-` <a id="reverse.iter.op-">[[reverse.iter.op-]]</a>
235
 
236
  ``` cpp
237
- reverse_iterator
238
- operator-(typename reverse_iterator<Iterator>::difference_type n) const;
239
  ```
240
 
241
  *Returns:* `reverse_iterator(current+n)`.
242
 
243
  ##### `operator-=` <a id="reverse.iter.op-=">[[reverse.iter.op-=]]</a>
244
 
245
  ``` cpp
246
- reverse_iterator&
247
- operator-=(typename reverse_iterator<Iterator>::difference_type n);
248
  ```
249
 
250
- *Effects:* `current += n;`
251
 
252
  *Returns:* `*this`.
253
 
254
  ##### `operator[]` <a id="reverse.iter.opindex">[[reverse.iter.opindex]]</a>
255
 
256
  ``` cpp
257
- unspecified operator[](
258
- typename reverse_iterator<Iterator>::difference_type n) const;
259
  ```
260
 
261
  *Returns:* `current[-n-1]`.
262
 
263
  ##### `operator==` <a id="reverse.iter.op==">[[reverse.iter.op==]]</a>
264
 
265
  ``` cpp
266
  template <class Iterator1, class Iterator2>
267
- bool operator==(
268
  const reverse_iterator<Iterator1>& x,
269
  const reverse_iterator<Iterator2>& y);
270
  ```
271
 
272
  *Returns:* `x.current == y.current`.
273
 
274
  ##### `operator<` <a id="reverse.iter.op<">[[reverse.iter.op<]]</a>
275
 
276
  ``` cpp
277
  template <class Iterator1, class Iterator2>
278
- bool operator<(
279
  const reverse_iterator<Iterator1>& x,
280
  const reverse_iterator<Iterator2>& y);
281
  ```
282
 
283
  *Returns:* `x.current > y.current`.
284
 
285
  ##### `operator!=` <a id="reverse.iter.op!=">[[reverse.iter.op!=]]</a>
286
 
287
  ``` cpp
288
  template <class Iterator1, class Iterator2>
289
- bool operator!=(
290
  const reverse_iterator<Iterator1>& x,
291
  const reverse_iterator<Iterator2>& y);
292
  ```
293
 
294
  *Returns:* `x.current != y.current`.
295
 
296
  ##### `operator>` <a id="reverse.iter.op>">[[reverse.iter.op>]]</a>
297
 
298
  ``` cpp
299
  template <class Iterator1, class Iterator2>
300
- bool operator>(
301
  const reverse_iterator<Iterator1>& x,
302
  const reverse_iterator<Iterator2>& y);
303
  ```
304
 
305
  *Returns:* `x.current < y.current`.
306
 
307
  ##### `operator>=` <a id="reverse.iter.op>=">[[reverse.iter.op>=]]</a>
308
 
309
  ``` cpp
310
  template <class Iterator1, class Iterator2>
311
- bool operator>=(
312
  const reverse_iterator<Iterator1>& x,
313
  const reverse_iterator<Iterator2>& y);
314
  ```
315
 
316
  *Returns:* `x.current <= y.current`.
317
 
318
  ##### `operator<=` <a id="reverse.iter.op<=">[[reverse.iter.op<=]]</a>
319
 
320
  ``` cpp
321
  template <class Iterator1, class Iterator2>
322
- bool operator<=(
323
  const reverse_iterator<Iterator1>& x,
324
  const reverse_iterator<Iterator2>& y);
325
  ```
326
 
327
  *Returns:* `x.current >= y.current`.
328
 
329
  ##### `operator-` <a id="reverse.iter.opdiff">[[reverse.iter.opdiff]]</a>
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>
341
 
342
  ``` cpp
343
  template <class Iterator>
344
- reverse_iterator<Iterator> operator+(
345
  typename reverse_iterator<Iterator>::difference_type n,
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
 
 
9
  #### Class template `reverse_iterator` <a id="reverse.iterator">[[reverse.iterator]]</a>
10
 
11
  ``` cpp
12
  namespace std {
13
  template <class Iterator>
14
+ class reverse_iterator {
 
 
 
 
 
15
  public:
16
+ using iterator_type = Iterator;
17
+ using iterator_category = typename iterator_traits<Iterator>::iterator_category;
18
+ using value_type = typename iterator_traits<Iterator>::value_type;
19
+ using difference_type = typename iterator_traits<Iterator>::difference_type;
20
+ using pointer = typename iterator_traits<Iterator>::pointer;
21
+ using reference = typename iterator_traits<Iterator>::reference;
22
 
23
+ constexpr reverse_iterator();
24
+ constexpr explicit reverse_iterator(Iterator x);
25
+ template <class U> constexpr reverse_iterator(const reverse_iterator<U>& u);
26
+ template <class U> constexpr reverse_iterator& operator=(const reverse_iterator<U>& u);
27
 
28
+ constexpr Iterator base() const; // explicit
29
+ constexpr reference operator*() const;
30
+ constexpr pointer operator->() const;
31
 
32
+ constexpr reverse_iterator& operator++();
33
+ constexpr reverse_iterator operator++(int);
34
+ constexpr reverse_iterator& operator--();
35
+ constexpr reverse_iterator operator--(int);
36
 
37
+ constexpr reverse_iterator operator+ (difference_type n) const;
38
+ constexpr reverse_iterator& operator+=(difference_type n);
39
+ constexpr reverse_iterator operator- (difference_type n) const;
40
+ constexpr reverse_iterator& operator-=(difference_type n);
41
+ constexpr unspecified operator[](difference_type n) const;
42
  protected:
43
  Iterator current;
44
  };
45
 
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 bool operator>=(
64
  const reverse_iterator<Iterator1>& x,
65
  const reverse_iterator<Iterator2>& y);
66
  template <class Iterator1, class Iterator2>
67
+ constexpr bool operator<=(
68
  const reverse_iterator<Iterator1>& x,
69
  const reverse_iterator<Iterator2>& y);
70
  template <class Iterator1, class Iterator2>
71
+ constexpr auto operator-(
72
  const reverse_iterator<Iterator1>& x,
73
  const reverse_iterator<Iterator2>& y) -> decltype(y.base() - x.base());
74
  template <class Iterator>
75
+ constexpr reverse_iterator<Iterator> operator+(
76
  typename reverse_iterator<Iterator>::difference_type n,
77
  const reverse_iterator<Iterator>& x);
78
 
79
  template <class Iterator>
80
+ constexpr reverse_iterator<Iterator> make_reverse_iterator(Iterator i);
81
  }
82
  ```
83
 
84
  #### `reverse_iterator` requirements <a id="reverse.iter.requirements">[[reverse.iter.requirements]]</a>
85
 
86
  The template parameter `Iterator` shall meet all the requirements of a
87
  Bidirectional Iterator ([[bidirectional.iterators]]).
88
 
89
+ Additionally, `Iterator` shall meet the requirements of a random access
90
+ iterator ([[random.access.iterators]]) if any of the members
91
  `operator+` ([[reverse.iter.op+]]), `operator-` (
92
  [[reverse.iter.op-]]), `operator+=` ([[reverse.iter.op+=]]),
93
  `operator-=` ([[reverse.iter.op-=]]), `operator[]` (
94
+ [[reverse.iter.opindex]]), or the non-member operators `operator<` (
95
  [[reverse.iter.op<]]), `operator>` ([[reverse.iter.op>]]),
96
  `operator<=` ([[reverse.iter.op<=]]), `operator>=` (
97
  [[reverse.iter.op>=]]), `operator-` ([[reverse.iter.opdiff]]) or
98
  `operator+` ([[reverse.iter.opsum]]) are referenced in a way that
99
  requires instantiation ([[temp.inst]]).
 
101
  #### `reverse_iterator` operations <a id="reverse.iter.ops">[[reverse.iter.ops]]</a>
102
 
103
  ##### `reverse_iterator` constructor <a id="reverse.iter.cons">[[reverse.iter.cons]]</a>
104
 
105
  ``` cpp
106
+ constexpr reverse_iterator();
107
  ```
108
 
109
+ *Effects:* Value-initializes `current`. Iterator operations applied to
110
  the resulting iterator have defined behavior if and only if the
111
  corresponding operations are defined on a value-initialized iterator of
112
  type `Iterator`.
113
 
114
  ``` cpp
115
+ constexpr explicit reverse_iterator(Iterator x);
116
  ```
117
 
118
  *Effects:* Initializes `current` with `x`.
119
 
120
  ``` cpp
121
+ template <class U> constexpr reverse_iterator(const reverse_iterator<U>& u);
122
  ```
123
 
124
  *Effects:* Initializes `current` with `u.current`.
125
 
126
  ##### `reverse_iterator::operator=` <a id="reverse.iter.op=">[[reverse.iter.op=]]</a>
127
 
128
  ``` cpp
129
  template <class U>
130
+ constexpr reverse_iterator&
131
  operator=(const reverse_iterator<U>& u);
132
  ```
133
 
134
  *Effects:* Assigns `u.base()` to current.
135
 
136
  *Returns:* `*this`.
137
 
138
  ##### Conversion <a id="reverse.iter.conv">[[reverse.iter.conv]]</a>
139
 
140
  ``` cpp
141
+ constexpr Iterator base() const; // explicit
142
  ```
143
 
144
  *Returns:* `current`.
145
 
146
  ##### `operator*` <a id="reverse.iter.op.star">[[reverse.iter.op.star]]</a>
147
 
148
  ``` cpp
149
+ constexpr reference operator*() const;
150
  ```
151
 
152
+ *Effects:* As if by:
153
 
154
  ``` cpp
155
  Iterator tmp = current;
156
  return *--tmp;
157
  ```
158
 
159
  ##### `operator->` <a id="reverse.iter.opref">[[reverse.iter.opref]]</a>
160
 
161
  ``` cpp
162
+ constexpr pointer operator->() const;
163
  ```
164
 
165
+ *Returns:* `addressof(operator*())`.
166
 
167
  ##### `operator++` <a id="reverse.iter.op++">[[reverse.iter.op++]]</a>
168
 
169
  ``` cpp
170
+ constexpr reverse_iterator& operator++();
171
  ```
172
 
173
+ *Effects:* As if by: `current;`
174
 
175
  *Returns:* `*this`.
176
 
177
  ``` cpp
178
+ constexpr reverse_iterator operator++(int);
179
  ```
180
 
181
+ *Effects:* As if by:
182
 
183
  ``` cpp
184
  reverse_iterator tmp = *this;
185
  --current;
186
  return tmp;
187
  ```
188
 
189
  \[reverse.iter.op\]`operator\dcr`
190
 
191
  ``` cpp
192
+ constexpr reverse_iterator& operator--();
193
  ```
194
 
195
+ *Effects:* As if by `++current`.
196
 
197
  *Returns:* `*this`.
198
 
199
  ``` cpp
200
+ constexpr reverse_iterator operator--(int);
201
  ```
202
 
203
+ *Effects:* As if by:
204
 
205
  ``` cpp
206
  reverse_iterator tmp = *this;
207
  ++current;
208
  return tmp;
209
  ```
210
 
211
  ##### `operator+` <a id="reverse.iter.op+">[[reverse.iter.op+]]</a>
212
 
213
  ``` cpp
214
+ constexpr reverse_iterator operator+(difference_type n) const;
 
215
  ```
216
 
217
  *Returns:* `reverse_iterator(current-n)`.
218
 
219
  ##### `operator+=` <a id="reverse.iter.op+=">[[reverse.iter.op+=]]</a>
220
 
221
  ``` cpp
222
+ constexpr reverse_iterator& operator+=(difference_type n);
 
223
  ```
224
 
225
+ *Effects:* As if by: `current -= n;`
226
 
227
  *Returns:* `*this`.
228
 
229
  ##### `operator-` <a id="reverse.iter.op-">[[reverse.iter.op-]]</a>
230
 
231
  ``` cpp
232
+ constexpr reverse_iterator operator-(difference_type n) const;
 
233
  ```
234
 
235
  *Returns:* `reverse_iterator(current+n)`.
236
 
237
  ##### `operator-=` <a id="reverse.iter.op-=">[[reverse.iter.op-=]]</a>
238
 
239
  ``` cpp
240
+ constexpr reverse_iterator& operator-=(difference_type n);
 
241
  ```
242
 
243
+ *Effects:* As if by: `current += n;`
244
 
245
  *Returns:* `*this`.
246
 
247
  ##### `operator[]` <a id="reverse.iter.opindex">[[reverse.iter.opindex]]</a>
248
 
249
  ``` cpp
250
+ constexpr unspecified operator[](difference_type n) const;
 
251
  ```
252
 
253
  *Returns:* `current[-n-1]`.
254
 
255
  ##### `operator==` <a id="reverse.iter.op==">[[reverse.iter.op==]]</a>
256
 
257
  ``` cpp
258
  template <class Iterator1, class Iterator2>
259
+ constexpr bool operator==(
260
  const reverse_iterator<Iterator1>& x,
261
  const reverse_iterator<Iterator2>& y);
262
  ```
263
 
264
  *Returns:* `x.current == y.current`.
265
 
266
  ##### `operator<` <a id="reverse.iter.op<">[[reverse.iter.op<]]</a>
267
 
268
  ``` cpp
269
  template <class Iterator1, class Iterator2>
270
+ constexpr bool operator<(
271
  const reverse_iterator<Iterator1>& x,
272
  const reverse_iterator<Iterator2>& y);
273
  ```
274
 
275
  *Returns:* `x.current > y.current`.
276
 
277
  ##### `operator!=` <a id="reverse.iter.op!=">[[reverse.iter.op!=]]</a>
278
 
279
  ``` cpp
280
  template <class Iterator1, class Iterator2>
281
+ constexpr bool operator!=(
282
  const reverse_iterator<Iterator1>& x,
283
  const reverse_iterator<Iterator2>& y);
284
  ```
285
 
286
  *Returns:* `x.current != y.current`.
287
 
288
  ##### `operator>` <a id="reverse.iter.op>">[[reverse.iter.op>]]</a>
289
 
290
  ``` cpp
291
  template <class Iterator1, class Iterator2>
292
+ constexpr bool operator>(
293
  const reverse_iterator<Iterator1>& x,
294
  const reverse_iterator<Iterator2>& y);
295
  ```
296
 
297
  *Returns:* `x.current < y.current`.
298
 
299
  ##### `operator>=` <a id="reverse.iter.op>=">[[reverse.iter.op>=]]</a>
300
 
301
  ``` cpp
302
  template <class Iterator1, class Iterator2>
303
+ constexpr bool operator>=(
304
  const reverse_iterator<Iterator1>& x,
305
  const reverse_iterator<Iterator2>& y);
306
  ```
307
 
308
  *Returns:* `x.current <= y.current`.
309
 
310
  ##### `operator<=` <a id="reverse.iter.op<=">[[reverse.iter.op<=]]</a>
311
 
312
  ``` cpp
313
  template <class Iterator1, class Iterator2>
314
+ constexpr bool operator<=(
315
  const reverse_iterator<Iterator1>& x,
316
  const reverse_iterator<Iterator2>& y);
317
  ```
318
 
319
  *Returns:* `x.current >= y.current`.
320
 
321
  ##### `operator-` <a id="reverse.iter.opdiff">[[reverse.iter.opdiff]]</a>
322
 
323
  ``` cpp
324
  template <class Iterator1, class Iterator2>
325
+ constexpr auto operator-(
326
  const reverse_iterator<Iterator1>& x,
327
  const reverse_iterator<Iterator2>& y) -> decltype(y.base() - x.base());
328
  ```
329
 
330
  *Returns:* `y.current - x.current`.
331
 
332
  ##### `operator+` <a id="reverse.iter.opsum">[[reverse.iter.opsum]]</a>
333
 
334
  ``` cpp
335
  template <class Iterator>
336
+ constexpr reverse_iterator<Iterator> operator+(
337
  typename reverse_iterator<Iterator>::difference_type n,
338
  const reverse_iterator<Iterator>& x);
339
  ```
340
 
341
  *Returns:* `reverse_iterator<Iterator> (x.current - n)`.
342
 
343
  ##### Non-member function `make_reverse_iterator()` <a id="reverse.iter.make">[[reverse.iter.make]]</a>
344
 
345
  ``` cpp
346
  template <class Iterator>
347
+ constexpr reverse_iterator<Iterator> make_reverse_iterator(Iterator i);
348
  ```
349
 
350
  *Returns:* `reverse_iterator<Iterator>(i)`.
351