tmp/tmpyllq8pdh/{from.md → to.md}
RENAMED
|
@@ -5,30 +5,29 @@ number of elements in the range can be determined in amortized constant
|
|
| 5 |
time using `ranges::size`.
|
| 6 |
|
| 7 |
``` cpp
|
| 8 |
template<class T>
|
| 9 |
concept sized_range =
|
| 10 |
-
range<T> &&
|
| 11 |
-
requires(T& t) { ranges::size(t); };
|
| 12 |
```
|
| 13 |
|
| 14 |
Given an lvalue `t` of type `remove_reference_t<T>`, `T` models
|
| 15 |
`sized_range` only if
|
| 16 |
|
| 17 |
- `ranges::size(t)` is amortized 𝑂(1), does not modify `t`, and is equal
|
| 18 |
-
to `ranges::distance(t)`, and
|
| 19 |
- if `iterator_t<T>` models `forward_iterator`, `ranges::size(t)` is
|
| 20 |
well-defined regardless of the evaluation of `ranges::begin(t)`.
|
| 21 |
\[*Note 1*: `ranges::size(t)` is otherwise not required to be
|
| 22 |
-
well-defined after evaluating `ranges::begin(t)`. For example,
|
| 23 |
-
`ranges::size(t)`
|
| 24 |
-
iterator type does not model `forward_iterator` only if
|
| 25 |
-
before the first call to `ranges::begin(t)`. — *end note*]
|
| 26 |
|
| 27 |
``` cpp
|
| 28 |
template<class>
|
| 29 |
-
|
| 30 |
```
|
| 31 |
|
| 32 |
*Remarks:* Pursuant to [[namespace.std]], users may specialize
|
| 33 |
`disable_sized_range` for cv-unqualified program-defined types. Such
|
| 34 |
specializations shall be usable in constant expressions [[expr.const]]
|
|
|
|
| 5 |
time using `ranges::size`.
|
| 6 |
|
| 7 |
``` cpp
|
| 8 |
template<class T>
|
| 9 |
concept sized_range =
|
| 10 |
+
range<T> && requires(T& t) { ranges::size(t); };
|
|
|
|
| 11 |
```
|
| 12 |
|
| 13 |
Given an lvalue `t` of type `remove_reference_t<T>`, `T` models
|
| 14 |
`sized_range` only if
|
| 15 |
|
| 16 |
- `ranges::size(t)` is amortized 𝑂(1), does not modify `t`, and is equal
|
| 17 |
+
to `ranges::distance(ranges::begin(t), ranges::end(t))`, and
|
| 18 |
- if `iterator_t<T>` models `forward_iterator`, `ranges::size(t)` is
|
| 19 |
well-defined regardless of the evaluation of `ranges::begin(t)`.
|
| 20 |
\[*Note 1*: `ranges::size(t)` is otherwise not required to be
|
| 21 |
+
well-defined after evaluating `ranges::begin(t)`. For example, it is
|
| 22 |
+
possible for `ranges::size(t)` to be well-defined for a `sized_range`
|
| 23 |
+
whose iterator type does not model `forward_iterator` only if
|
| 24 |
+
evaluated before the first call to `ranges::begin(t)`. — *end note*]
|
| 25 |
|
| 26 |
``` cpp
|
| 27 |
template<class>
|
| 28 |
+
constexpr bool disable_sized_range = false;
|
| 29 |
```
|
| 30 |
|
| 31 |
*Remarks:* Pursuant to [[namespace.std]], users may specialize
|
| 32 |
`disable_sized_range` for cv-unqualified program-defined types. Such
|
| 33 |
specializations shall be usable in constant expressions [[expr.const]]
|