From Jason Turner

[range.elements.sentinel]

Diff to HTML by rtfpessoa

Files changed (1) hide show
  1. tmp/tmp_u3gnf0b/{from.md → to.md} +27 -135
tmp/tmp_u3gnf0b/{from.md → to.md} RENAMED
@@ -2,33 +2,39 @@
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
@@ -49,144 +55,30 @@ 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
 
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
+ returnable-element<range_reference_t<V>, N>
9
  template<bool Const>
10
+ class elements_view<V, N>::sentinel {
11
  private:
12
+ using Base = maybe-const<Const, V>; // exposition only
13
  sentinel_t<Base> end_ = sentinel_t<Base>(); // exposition only
14
+
15
  public:
16
  sentinel() = default;
17
  constexpr explicit sentinel(sentinel_t<Base> end);
18
  constexpr sentinel(sentinel<!Const> other)
19
  requires Const && convertible_to<sentinel_t<V>, sentinel_t<Base>>;
20
 
21
  constexpr sentinel_t<Base> base() const;
22
 
23
+ template<bool OtherConst>
24
+ requires sentinel_for<sentinel_t<Base>, iterator_t<maybe-const<OtherConst, V>>>
25
+ friend constexpr bool operator==(const iterator<OtherConst>& x, const sentinel& y);
26
 
27
+ template<bool OtherConst>
28
+ requires sized_sentinel_for<sentinel_t<Base>, iterator_t<maybe-const<OtherConst, V>>>
29
+ friend constexpr range_difference_t<maybe-const<OtherConst, V>>
30
+ operator-(const iterator<OtherConst>& x, const sentinel& y);
31
 
32
+ template<bool OtherConst>
33
+ requires sized_sentinel_for<sentinel_t<Base>, iterator_t<maybe-const<OtherConst, V>>>
34
+ friend constexpr range_difference_t<maybe-const<OtherConst, V>>
35
+ operator-(const sentinel& x, const iterator<OtherConst>& y);
36
  };
37
  }
38
  ```
39
 
40
  ``` cpp
 
55
  ```
56
 
57
  *Effects:* Equivalent to: `return `*`end_`*`;`
58
 
59
  ``` cpp
60
+ template<bool OtherConst>
61
+ requires sentinel_for<sentinel_t<Base>, iterator_t<maybe-const<OtherConst, V>>>
62
+ friend constexpr bool operator==(const iterator<OtherConst>& x, const sentinel& y);
63
  ```
64
 
65
  *Effects:* Equivalent to: `return x.`*`current_`*` == y.`*`end_`*`;`
66
 
67
  ``` cpp
68
+ template<bool OtherConst>
69
+ requires sized_sentinel_for<sentinel_t<Base>, iterator_t<maybe-const<OtherConst, V>>>
70
+ friend constexpr range_difference_t<maybe-const<OtherConst, V>>
71
+ operator-(const iterator<OtherConst>& x, const sentinel& y);
72
  ```
73
 
74
  *Effects:* Equivalent to: `return x.`*`current_`*` - y.`*`end_`*`;`
75
 
76
  ``` cpp
77
+ template<bool OtherConst>
78
+ requires sized_sentinel_for<sentinel_t<Base>, iterator_t<maybe-const<OtherConst, V>>>
79
+ friend constexpr range_difference_t<maybe-const<OtherConst, V>>
80
+ operator-(const sentinel& x, const iterator<OtherConst>& y);
81
  ```
82
 
83
  *Effects:* Equivalent to: `return x.`*`end_`*` - y.`*`current_`*`;`
84