From Jason Turner

[const.iterators.ops]

Diff to HTML by rtfpessoa

Files changed (1) hide show
  1. tmp/tmp1y7dd3l0/{from.md → to.md} +227 -0
tmp/tmp1y7dd3l0/{from.md → to.md} RENAMED
@@ -0,0 +1,227 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #### Operations <a id="const.iterators.ops">[[const.iterators.ops]]</a>
2
+
3
+ ``` cpp
4
+ constexpr basic_const_iterator(Iterator current);
5
+ ```
6
+
7
+ *Effects:* Initializes *current\_* with `std::move(current)`.
8
+
9
+ ``` cpp
10
+ template<convertible_to<Iterator> U>
11
+ constexpr basic_const_iterator(basic_const_iterator<U> current);
12
+ ```
13
+
14
+ *Effects:* Initializes *current\_* with
15
+ `std::move(current.`*`current_`*`)`.
16
+
17
+ ``` cpp
18
+ template<different-from<basic_const_iterator> T>
19
+ requires convertible_to<T, Iterator>
20
+ constexpr basic_const_iterator(T&& current);
21
+ ```
22
+
23
+ *Effects:* Initializes *current\_* with `std::forward<T>(current)`.
24
+
25
+ ``` cpp
26
+ constexpr const Iterator& base() const & noexcept;
27
+ ```
28
+
29
+ *Effects:* Equivalent to: `return `*`current_`*`;`
30
+
31
+ ``` cpp
32
+ constexpr Iterator base() &&;
33
+ ```
34
+
35
+ *Effects:* Equivalent to: `return std::move(`*`current_`*`);`
36
+
37
+ ``` cpp
38
+ constexpr reference operator*() const;
39
+ ```
40
+
41
+ *Effects:* Equivalent to:
42
+ `return static_cast<`*`reference`*`>(*`*`current_`*`);`
43
+
44
+ ``` cpp
45
+ constexpr const auto* operator->() const
46
+ requires is_lvalue_reference_v<iter_reference_t<Iterator>> &&
47
+ same_as<remove_cvref_t<iter_reference_t<Iterator>>, value_type>;
48
+ ```
49
+
50
+ *Returns:* If `Iterator` models `contiguous_iterator`,
51
+ `to_address(`*`current_`*`)`; otherwise, `addressof(*`*`current_`*`)`.
52
+
53
+ ``` cpp
54
+ constexpr basic_const_iterator& operator++();
55
+ ```
56
+
57
+ *Effects:* Equivalent to:
58
+
59
+ ``` cpp
60
+ ++current_;
61
+ return *this;
62
+ ```
63
+
64
+ ``` cpp
65
+ constexpr void operator++(int);
66
+ ```
67
+
68
+ *Effects:* Equivalent to: `++`*`current_`*`;`
69
+
70
+ ``` cpp
71
+ constexpr basic_const_iterator operator++(int) requires forward_iterator<Iterator>;
72
+ ```
73
+
74
+ *Effects:* Equivalent to:
75
+
76
+ ``` cpp
77
+ auto tmp = *this;
78
+ ++*this;
79
+ return tmp;
80
+ ```
81
+
82
+ ``` cpp
83
+ constexpr basic_const_iterator& operator--() requires bidirectional_iterator<Iterator>;
84
+ ```
85
+
86
+ *Effects:* Equivalent to:
87
+
88
+ ``` cpp
89
+ --current_;
90
+ return *this;
91
+ ```
92
+
93
+ ``` cpp
94
+ constexpr basic_const_iterator operator--(int) requires bidirectional_iterator<Iterator>;
95
+ ```
96
+
97
+ *Effects:* Equivalent to:
98
+
99
+ ``` cpp
100
+ auto tmp = *this;
101
+ --*this;
102
+ return tmp;
103
+ ```
104
+
105
+ ``` cpp
106
+ constexpr basic_const_iterator& operator+=(difference_type n)
107
+ requires random_access_iterator<Iterator>;
108
+ constexpr basic_const_iterator& operator-=(difference_type n)
109
+ requires random_access_iterator<Iterator>;
110
+ ```
111
+
112
+ Let *`op`* be the operator.
113
+
114
+ *Effects:* Equivalent to:
115
+
116
+ ``` cpp
117
+ current_ op n;
118
+ return *this;
119
+ ```
120
+
121
+ ``` cpp
122
+ constexpr reference operator[](difference_type n) const requires random_access_iterator<Iterator>
123
+ ```
124
+
125
+ *Effects:* Equivalent to:
126
+ `return static_cast<`*`reference`*`>(`*`current_`*`[n]);`
127
+
128
+ ``` cpp
129
+ template<sentinel_for<Iterator> S>
130
+ constexpr bool operator==(const S& s) const;
131
+ ```
132
+
133
+ *Effects:* Equivalent to: `return `*`current_`*` == s;`
134
+
135
+ ``` cpp
136
+ constexpr bool operator<(const basic_const_iterator& y) const
137
+ requires random_access_iterator<Iterator>;
138
+ constexpr bool operator>(const basic_const_iterator& y) const
139
+ requires random_access_iterator<Iterator>;
140
+ constexpr bool operator<=(const basic_const_iterator& y) const
141
+ requires random_access_iterator<Iterator>;
142
+ constexpr bool operator>=(const basic_const_iterator& y) const
143
+ requires random_access_iterator<Iterator>;
144
+ constexpr auto operator<=>(const basic_const_iterator& y) const
145
+ requires random_access_iterator<Iterator> && three_way_comparable<Iterator>;
146
+ ```
147
+
148
+ Let *`op`* be the operator.
149
+
150
+ *Effects:* Equivalent to:
151
+ `return `*`current_`*` `*`op`*` `*`y.current_`*`;`
152
+
153
+ ``` cpp
154
+ template<different-from<basic_const_iterator> I>
155
+ constexpr bool operator<(const I& y) const
156
+ requires random_access_iterator<Iterator> && totally_ordered_with<Iterator, I>;
157
+ template<different-from<basic_const_iterator> I>
158
+ constexpr bool operator>(const I& y) const
159
+ requires random_access_iterator<Iterator> && totally_ordered_with<Iterator, I>;
160
+ template<different-from<basic_const_iterator> I>
161
+ constexpr bool operator<=(const I& y) const
162
+ requires random_access_iterator<Iterator> && totally_ordered_with<Iterator, I>;
163
+ template<different-from<basic_const_iterator> I>
164
+ constexpr bool operator>=(const I& y) const
165
+ requires random_access_iterator<Iterator> && totally_ordered_with<Iterator, I>;
166
+ template<different-from<basic_const_iterator> I>
167
+ constexpr auto operator<=>(const I& y) const
168
+ requires random_access_iterator<Iterator> && totally_ordered_with<Iterator, I> &&
169
+ three_way_comparable_with<Iterator, I>;
170
+ ```
171
+
172
+ Let *`op`* be the operator.
173
+
174
+ *Effects:* Equivalent to: `return `*`current_`*` `*`op`*` y;`
175
+
176
+ ``` cpp
177
+ template<not-a-const-iterator I>
178
+ friend constexpr bool operator<(const I& x, const basic_const_iterator& y)
179
+ requires random_access_iterator<Iterator> && totally_ordered_with<Iterator, I>;
180
+ template<not-a-const-iterator I>
181
+ friend constexpr bool operator>(const I& x, const basic_const_iterator& y)
182
+ requires random_access_iterator<Iterator> && totally_ordered_with<Iterator, I>;
183
+ template<not-a-const-iterator I>
184
+ friend constexpr bool operator<=(const I& x, const basic_const_iterator& y)
185
+ requires random_access_iterator<Iterator> && totally_ordered_with<Iterator, I>;
186
+ template<not-a-const-iterator I>
187
+ friend constexpr bool operator>=(const I& x, const basic_const_iterator& y)
188
+ requires random_access_iterator<Iterator> && totally_ordered_with<Iterator, I>;
189
+ ```
190
+
191
+ Let *`op`* be the operator.
192
+
193
+ *Returns:* Equivalent to: `return x `*`op`*` y.`*`current_`*`;`
194
+
195
+ ``` cpp
196
+ friend constexpr basic_const_iterator operator+(const basic_const_iterator& i, difference_type n)
197
+ requires random_access_iterator<Iterator>;
198
+ friend constexpr basic_const_iterator operator+(difference_type n, const basic_const_iterator& i)
199
+ requires random_access_iterator<Iterator>;
200
+ ```
201
+
202
+ *Effects:* Equivalent to:
203
+ `return basic_const_iterator(i.`*`current_`*` + n);`
204
+
205
+ ``` cpp
206
+ friend constexpr basic_const_iterator operator-(const basic_const_iterator& i, difference_type n)
207
+ requires random_access_iterator<Iterator>;
208
+ ```
209
+
210
+ *Effects:* Equivalent to:
211
+ `return basic_const_iterator(i.`*`current_`*` - n);`
212
+
213
+ ``` cpp
214
+ template<sized_sentinel_for<Iterator> S>
215
+ constexpr difference_type operator-(const S& y) const;
216
+ ```
217
+
218
+ *Effects:* Equivalent to: `return `*`current_`*` - y;`
219
+
220
+ ``` cpp
221
+ template<not-a-const-iterator S>
222
+ requires sized_sentinel_for<S, Iterator>
223
+ friend constexpr difference_type operator-(const S& x, const basic_const_iterator& y);
224
+ ```
225
+
226
+ *Effects:* Equivalent to: `return x - y.`*`current_`*`;`
227
+