From Jason Turner

[range.elements.sentinel]

Diff to HTML by rtfpessoa

Files changed (1) hide show
  1. tmp/tmpugui0u77/{from.md → to.md} +192 -0
tmp/tmpugui0u77/{from.md → to.md} RENAMED
@@ -0,0 +1,192 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #### Class template `elements_view::sentinel` <a id="range.elements.sentinel">[[range.elements.sentinel]]</a>
2
+
3
+ ``` cpp
4
+ namespace std::ranges {
5
+ template<input_range V, size_t N>
6
+ requires view<V> && has-tuple-element<range_value_t<V>, N> &&
7
+ has-tuple-element<remove_reference_t<range_reference_t<V>>, N>
8
+ template<bool Const>
9
+ class elements_view<V, N>::sentinel { // exposition only
10
+ private:
11
+ using Base = conditional_t<Const, const V, V>; // exposition only
12
+ sentinel_t<Base> end_ = sentinel_t<Base>(); // exposition only
13
+ public:
14
+ sentinel() = default;
15
+ constexpr explicit sentinel(sentinel_t<Base> end);
16
+ constexpr sentinel(sentinel<!Const> other)
17
+ requires Const && convertible_to<sentinel_t<V>, sentinel_t<Base>>;
18
+
19
+ constexpr sentinel_t<Base> base() const;
20
+
21
+ friend constexpr bool operator==(const iterator<Const>& x, const sentinel& y);
22
+
23
+ friend constexpr range_difference_t<Base>
24
+ operator-(const iterator<Const>& x, const sentinel& y)
25
+ requires sized_sentinel_for<sentinel_t<Base>, iterator_t<Base>>;
26
+
27
+ friend constexpr range_difference_t<Base>
28
+ operator-(const sentinel& x, const iterator<Const>& y)
29
+ requires sized_sentinel_for<sentinel_t<Base>, iterator_t<Base>>;
30
+ };
31
+ }
32
+ ```
33
+
34
+ ``` cpp
35
+ constexpr explicit sentinel(sentinel_t<Base> end);
36
+ ```
37
+
38
+ *Effects:* Initializes *end\_* with `end`.
39
+
40
+ ``` cpp
41
+ constexpr sentinel(sentinel<!Const> other)
42
+ requires Const && convertible_to<sentinel_t<V>, sentinel_t<Base>>;
43
+ ```
44
+
45
+ *Effects:* Initializes *end\_* with `std::move(other.`*`end_`*`)`.
46
+
47
+ ``` cpp
48
+ constexpr sentinel_t<Base> base() const;
49
+ ```
50
+
51
+ *Effects:* Equivalent to: `return `*`end_`*`;`
52
+
53
+ ``` cpp
54
+ friend constexpr bool operator==(const iterator<Const>& x, const sentinel& y);
55
+ ```
56
+
57
+ *Effects:* Equivalent to: `return x.`*`current_`*` == y.`*`end_`*`;`
58
+
59
+ ``` cpp
60
+ friend constexpr range_difference_t<Base>
61
+ operator-(const iterator<Const>& x, const sentinel& y)
62
+ requires sized_sentinel_for<sentinel_t<Base>, iterator_t<Base>>;
63
+ ```
64
+
65
+ *Effects:* Equivalent to: `return x.`*`current_`*` - y.`*`end_`*`;`
66
+
67
+ ``` cpp
68
+ friend constexpr range_difference_t<Base>
69
+ operator-(const sentinel& x, const iterator<Const>& y)
70
+ requires sized_sentinel_for<sentinel_t<Base>, iterator_t<Base>>;
71
+ ```
72
+
73
+ *Effects:* Equivalent to: `return x.`*`end_`*` - y.`*`current_`*`;`
74
+
75
+ <!-- Link reference definitions -->
76
+ [basic.compound]: basic.md#basic.compound
77
+ [concepts.equality]: concepts.md#concepts.equality
78
+ [containers]: containers.md#containers
79
+ [conv.rval]: expr.md#conv.rval
80
+ [customization.point.object]: library.md#customization.point.object
81
+ [dcl.array]: dcl.md#dcl.array
82
+ [expr.const]: expr.md#expr.const
83
+ [iterator.concept.bidir]: iterators.md#iterator.concept.bidir
84
+ [iterator.concept.iterator]: iterators.md#iterator.concept.iterator
85
+ [iterator.concept.output]: iterators.md#iterator.concept.output
86
+ [iterator.concept.random.access]: iterators.md#iterator.concept.random.access
87
+ [iterator.concept.sizedsentinel]: iterators.md#iterator.concept.sizedsentinel
88
+ [iterator.concept.winc]: iterators.md#iterator.concept.winc
89
+ [iterator.requirements.general]: iterators.md#iterator.requirements.general
90
+ [namespace.std]: library.md#namespace.std
91
+ [range.access]: #range.access
92
+ [range.access.begin]: #range.access.begin
93
+ [range.access.cbegin]: #range.access.cbegin
94
+ [range.access.cend]: #range.access.cend
95
+ [range.access.crbegin]: #range.access.crbegin
96
+ [range.access.crend]: #range.access.crend
97
+ [range.access.end]: #range.access.end
98
+ [range.access.rbegin]: #range.access.rbegin
99
+ [range.access.rend]: #range.access.rend
100
+ [range.adaptor.object]: #range.adaptor.object
101
+ [range.adaptors]: #range.adaptors
102
+ [range.all]: #range.all
103
+ [range.common]: #range.common
104
+ [range.common.overview]: #range.common.overview
105
+ [range.common.view]: #range.common.view
106
+ [range.counted]: #range.counted
107
+ [range.dangling]: #range.dangling
108
+ [range.drop]: #range.drop
109
+ [range.drop.overview]: #range.drop.overview
110
+ [range.drop.view]: #range.drop.view
111
+ [range.drop.while]: #range.drop.while
112
+ [range.drop.while.overview]: #range.drop.while.overview
113
+ [range.drop.while.view]: #range.drop.while.view
114
+ [range.elements]: #range.elements
115
+ [range.elements.iterator]: #range.elements.iterator
116
+ [range.elements.overview]: #range.elements.overview
117
+ [range.elements.sentinel]: #range.elements.sentinel
118
+ [range.elements.view]: #range.elements.view
119
+ [range.empty]: #range.empty
120
+ [range.empty.overview]: #range.empty.overview
121
+ [range.empty.view]: #range.empty.view
122
+ [range.factories]: #range.factories
123
+ [range.filter]: #range.filter
124
+ [range.filter.iterator]: #range.filter.iterator
125
+ [range.filter.overview]: #range.filter.overview
126
+ [range.filter.sentinel]: #range.filter.sentinel
127
+ [range.filter.view]: #range.filter.view
128
+ [range.iota]: #range.iota
129
+ [range.iota.iterator]: #range.iota.iterator
130
+ [range.iota.overview]: #range.iota.overview
131
+ [range.iota.sentinel]: #range.iota.sentinel
132
+ [range.iota.view]: #range.iota.view
133
+ [range.istream]: #range.istream
134
+ [range.istream.iterator]: #range.istream.iterator
135
+ [range.istream.overview]: #range.istream.overview
136
+ [range.istream.view]: #range.istream.view
137
+ [range.join]: #range.join
138
+ [range.join.iterator]: #range.join.iterator
139
+ [range.join.overview]: #range.join.overview
140
+ [range.join.sentinel]: #range.join.sentinel
141
+ [range.join.view]: #range.join.view
142
+ [range.prim.cdata]: #range.prim.cdata
143
+ [range.prim.data]: #range.prim.data
144
+ [range.prim.empty]: #range.prim.empty
145
+ [range.prim.size]: #range.prim.size
146
+ [range.prim.ssize]: #range.prim.ssize
147
+ [range.range]: #range.range
148
+ [range.ref.view]: #range.ref.view
149
+ [range.refinements]: #range.refinements
150
+ [range.req]: #range.req
151
+ [range.req.general]: #range.req.general
152
+ [range.reverse]: #range.reverse
153
+ [range.reverse.overview]: #range.reverse.overview
154
+ [range.reverse.view]: #range.reverse.view
155
+ [range.semi.wrap]: #range.semi.wrap
156
+ [range.single]: #range.single
157
+ [range.single.overview]: #range.single.overview
158
+ [range.single.view]: #range.single.view
159
+ [range.sized]: #range.sized
160
+ [range.split]: #range.split
161
+ [range.split.inner]: #range.split.inner
162
+ [range.split.outer]: #range.split.outer
163
+ [range.split.outer.value]: #range.split.outer.value
164
+ [range.split.overview]: #range.split.overview
165
+ [range.split.view]: #range.split.view
166
+ [range.subrange]: #range.subrange
167
+ [range.subrange.access]: #range.subrange.access
168
+ [range.subrange.ctor]: #range.subrange.ctor
169
+ [range.summary]: #range.summary
170
+ [range.take]: #range.take
171
+ [range.take.overview]: #range.take.overview
172
+ [range.take.sentinel]: #range.take.sentinel
173
+ [range.take.view]: #range.take.view
174
+ [range.take.while]: #range.take.while
175
+ [range.take.while.overview]: #range.take.while.overview
176
+ [range.take.while.sentinel]: #range.take.while.sentinel
177
+ [range.take.while.view]: #range.take.while.view
178
+ [range.transform]: #range.transform
179
+ [range.transform.iterator]: #range.transform.iterator
180
+ [range.transform.overview]: #range.transform.overview
181
+ [range.transform.sentinel]: #range.transform.sentinel
182
+ [range.transform.view]: #range.transform.view
183
+ [range.utility]: #range.utility
184
+ [range.utility.helpers]: #range.utility.helpers
185
+ [range.view]: #range.view
186
+ [ranges]: #ranges
187
+ [ranges.general]: #ranges.general
188
+ [ranges.syn]: #ranges.syn
189
+ [string.view]: strings.md#string.view
190
+ [view.interface]: #view.interface
191
+ [view.interface.members]: #view.interface.members
192
+ [views.span]: containers.md#views.span