From Jason Turner

[range.subrange]

Diff to HTML by rtfpessoa

tmp/tmptm54ltmf/{from.md → to.md} RENAMED
@@ -62,21 +62,21 @@ namespace std::ranges {
62
  template<different-from<subrange> PairLike>
63
  requires pair-like-convertible-from<PairLike, const I&, const S&>
64
  constexpr operator PairLike() const;
65
 
66
  constexpr I begin() const requires copyable<I>;
67
- [[nodiscard]] constexpr I begin() requires (!copyable<I>);
68
  constexpr S end() const;
69
 
70
  constexpr bool empty() const;
71
  constexpr make-unsigned-like-t<iter_difference_t<I>> size() const
72
  requires (K == subrange_kind::sized);
73
 
74
- [[nodiscard]] constexpr subrange next(iter_difference_t<I> n = 1) const &
75
  requires forward_iterator<I>;
76
- [[nodiscard]] constexpr subrange next(iter_difference_t<I> n = 1) &&;
77
- [[nodiscard]] constexpr subrange prev(iter_difference_t<I> n = 1) const
78
  requires bidirectional_iterator<I>;
79
  constexpr subrange& advance(iter_difference_t<I> n);
80
  };
81
 
82
  template<input_or_output_iterator I, sentinel_for<I> S>
@@ -155,11 +155,11 @@ constexpr I begin() const requires copyable<I>;
155
  ```
156
 
157
  *Effects:* Equivalent to: `return `*`begin_`*`;`
158
 
159
  ``` cpp
160
- [[nodiscard]] constexpr I begin() requires (!copyable<I>);
161
  ```
162
 
163
  *Effects:* Equivalent to: `return std::move(`*`begin_`*`);`
164
 
165
  ``` cpp
@@ -184,11 +184,11 @@ constexpr make-unsigned-like-t<iter_difference_t<I>> size() const
184
  - If *StoreSize* is `true`, equivalent to: `return `*`size_`*`;`
185
  - Otherwise, equivalent to:
186
  `return `*`to-unsigned-like`*`(`*`end_`*` - `*`begin_`*`);`
187
 
188
  ``` cpp
189
- [[nodiscard]] constexpr subrange next(iter_difference_t<I> n = 1) const &
190
  requires forward_iterator<I>;
191
  ```
192
 
193
  *Effects:* Equivalent to:
194
 
@@ -197,22 +197,22 @@ auto tmp = *this;
197
  tmp.advance(n);
198
  return tmp;
199
  ```
200
 
201
  ``` cpp
202
- [[nodiscard]] constexpr subrange next(iter_difference_t<I> n = 1) &&;
203
  ```
204
 
205
  *Effects:* Equivalent to:
206
 
207
  ``` cpp
208
  advance(n);
209
  return std::move(*this);
210
  ```
211
 
212
  ``` cpp
213
- [[nodiscard]] constexpr subrange prev(iter_difference_t<I> n = 1) const
214
  requires bidirectional_iterator<I>;
215
  ```
216
 
217
  *Effects:* Equivalent to:
218
 
 
62
  template<different-from<subrange> PairLike>
63
  requires pair-like-convertible-from<PairLike, const I&, const S&>
64
  constexpr operator PairLike() const;
65
 
66
  constexpr I begin() const requires copyable<I>;
67
+ constexpr I begin() requires (!copyable<I>);
68
  constexpr S end() const;
69
 
70
  constexpr bool empty() const;
71
  constexpr make-unsigned-like-t<iter_difference_t<I>> size() const
72
  requires (K == subrange_kind::sized);
73
 
74
+ constexpr subrange next(iter_difference_t<I> n = 1) const &
75
  requires forward_iterator<I>;
76
+ constexpr subrange next(iter_difference_t<I> n = 1) &&;
77
+ constexpr subrange prev(iter_difference_t<I> n = 1) const
78
  requires bidirectional_iterator<I>;
79
  constexpr subrange& advance(iter_difference_t<I> n);
80
  };
81
 
82
  template<input_or_output_iterator I, sentinel_for<I> S>
 
155
  ```
156
 
157
  *Effects:* Equivalent to: `return `*`begin_`*`;`
158
 
159
  ``` cpp
160
+ constexpr I begin() requires (!copyable<I>);
161
  ```
162
 
163
  *Effects:* Equivalent to: `return std::move(`*`begin_`*`);`
164
 
165
  ``` cpp
 
184
  - If *StoreSize* is `true`, equivalent to: `return `*`size_`*`;`
185
  - Otherwise, equivalent to:
186
  `return `*`to-unsigned-like`*`(`*`end_`*` - `*`begin_`*`);`
187
 
188
  ``` cpp
189
+ constexpr subrange next(iter_difference_t<I> n = 1) const &
190
  requires forward_iterator<I>;
191
  ```
192
 
193
  *Effects:* Equivalent to:
194
 
 
197
  tmp.advance(n);
198
  return tmp;
199
  ```
200
 
201
  ``` cpp
202
+ constexpr subrange next(iter_difference_t<I> n = 1) &&;
203
  ```
204
 
205
  *Effects:* Equivalent to:
206
 
207
  ``` cpp
208
  advance(n);
209
  return std::move(*this);
210
  ```
211
 
212
  ``` cpp
213
+ constexpr subrange prev(iter_difference_t<I> n = 1) const
214
  requires bidirectional_iterator<I>;
215
  ```
216
 
217
  *Effects:* Equivalent to:
218