tmp/tmp6qsf25ns/{from.md → to.md}
RENAMED
|
@@ -31,29 +31,29 @@ void f() {
|
|
| 31 |
### Header `<generator>` synopsis <a id="generator.syn">[[generator.syn]]</a>
|
| 32 |
|
| 33 |
``` cpp
|
| 34 |
namespace std {
|
| 35 |
// [coro.generator.class], class template generator
|
| 36 |
-
template<class Ref, class
|
| 37 |
class generator;
|
| 38 |
|
| 39 |
namespace pmr {
|
| 40 |
-
template<class
|
| 41 |
-
using generator = std::generator<
|
| 42 |
}
|
| 43 |
}
|
| 44 |
```
|
| 45 |
|
| 46 |
### Class template `generator` <a id="coro.generator.class">[[coro.generator.class]]</a>
|
| 47 |
|
| 48 |
``` cpp
|
| 49 |
namespace std {
|
| 50 |
-
template<class Ref, class
|
| 51 |
-
class generator : public ranges::view_interface<generator<Ref,
|
| 52 |
private:
|
| 53 |
-
using value = conditional_t<is_void_v<
|
| 54 |
-
using reference = conditional_t<is_void_v<
|
| 55 |
|
| 56 |
// [coro.generator.iterator], class generator::iterator
|
| 57 |
class iterator; // exposition only
|
| 58 |
|
| 59 |
public:
|
|
@@ -112,11 +112,11 @@ undefined.
|
|
| 112 |
generator(generator&& other) noexcept;
|
| 113 |
```
|
| 114 |
|
| 115 |
*Effects:* Initializes *coroutine\_* with
|
| 116 |
`exchange(other.`*`coroutine_`*`, {})` and *active\_* with
|
| 117 |
-
`exchange(other.active_, nullptr)`.
|
| 118 |
|
| 119 |
[*Note 1*: Iterators previously obtained from `other` are not
|
| 120 |
invalidated; they become iterators into `*this`. — *end note*]
|
| 121 |
|
| 122 |
``` cpp
|
|
@@ -176,12 +176,12 @@ default_sentinel_t end() const noexcept;
|
|
| 176 |
|
| 177 |
### Class `generator::promise_type` <a id="coro.generator.promise">[[coro.generator.promise]]</a>
|
| 178 |
|
| 179 |
``` cpp
|
| 180 |
namespace std {
|
| 181 |
-
template<class Ref, class
|
| 182 |
-
class generator<Ref,
|
| 183 |
public:
|
| 184 |
generator get_return_object() noexcept;
|
| 185 |
|
| 186 |
suspend_always initial_suspend() const noexcept { return {}; }
|
| 187 |
auto final_suspend() noexcept;
|
|
@@ -193,29 +193,30 @@ namespace std {
|
|
| 193 |
constructible_from<remove_cvref_t<yielded>, const remove_reference_t<yielded>&>;
|
| 194 |
|
| 195 |
template<class R2, class V2, class Alloc2, class Unused>
|
| 196 |
requires same_as<typename generator<R2, V2, Alloc2>::yielded, yielded>
|
| 197 |
auto yield_value(ranges::elements_of<generator<R2, V2, Alloc2>&&, Unused> g) noexcept;
|
|
|
|
|
|
|
|
|
|
| 198 |
|
| 199 |
template<ranges::input_range R, class Alloc>
|
| 200 |
requires convertible_to<ranges::range_reference_t<R>, yielded>
|
| 201 |
-
auto yield_value(ranges::elements_of<R, Alloc> r)
|
| 202 |
|
| 203 |
void await_transform() = delete;
|
| 204 |
|
| 205 |
void return_void() const noexcept {}
|
| 206 |
void unhandled_exception();
|
| 207 |
|
| 208 |
void* operator new(size_t size)
|
| 209 |
requires same_as<Allocator, void> || default_initializable<Allocator>;
|
| 210 |
|
| 211 |
template<class Alloc, class... Args>
|
| 212 |
-
requires same_as<Allocator, void> || convertible_to<const Alloc&, Allocator>
|
| 213 |
void* operator new(size_t size, allocator_arg_t, const Alloc& alloc, const Args&...);
|
| 214 |
|
| 215 |
template<class This, class Alloc, class... Args>
|
| 216 |
-
requires same_as<Allocator, void> || convertible_to<const Alloc&, Allocator>
|
| 217 |
void* operator new(size_t size, const This&, allocator_arg_t, const Alloc& alloc,
|
| 218 |
const Args&...);
|
| 219 |
|
| 220 |
void operator delete(void* pointer, size_t size) noexcept;
|
| 221 |
|
|
@@ -282,10 +283,13 @@ object.
|
|
| 282 |
|
| 283 |
``` cpp
|
| 284 |
template<class R2, class V2, class Alloc2, class Unused>
|
| 285 |
requires same_as<typename generator<R2, V2, Alloc2>::yielded, yielded>
|
| 286 |
auto yield_value(ranges::elements_of<generator<R2, V2, Alloc2>&&, Unused> g) noexcept;
|
|
|
|
|
|
|
|
|
|
| 287 |
```
|
| 288 |
|
| 289 |
*Preconditions:* A handle referring to the coroutine whose promise
|
| 290 |
object is `*this` is at the top of `*`*`active_`* of some `generator`
|
| 291 |
object `x`. The coroutine referred to by `g.range.`*`coroutine_`* is
|
|
@@ -298,24 +302,24 @@ into which `g.range` is moved, whose member `await_ready` returns
|
|
| 298 |
execution of the coroutine referred to by `g.range.`*`coroutine_`*, and
|
| 299 |
whose member `await_resume` evaluates `rethrow_exception(`*`except_`*`)`
|
| 300 |
if `bool(`*`except_`*`)` is `true`. If `bool(`*`except_`*`)` is `false`,
|
| 301 |
the `await_resume` member has no effects.
|
| 302 |
|
| 303 |
-
*Remarks:* A *yield-expression* that calls
|
| 304 |
-
[[expr.yield]].
|
| 305 |
|
| 306 |
``` cpp
|
| 307 |
template<ranges::input_range R, class Alloc>
|
| 308 |
requires convertible_to<ranges::range_reference_t<R>, yielded>
|
| 309 |
-
auto yield_value(ranges::elements_of<R, Alloc> r)
|
| 310 |
```
|
| 311 |
|
| 312 |
*Effects:* Equivalent to:
|
| 313 |
|
| 314 |
``` cpp
|
| 315 |
auto nested = [](allocator_arg_t, Alloc, ranges::iterator_t<R> i, ranges::sentinel_t<R> s)
|
| 316 |
-
-> generator<yielded,
|
| 317 |
for (; i != s; ++i) {
|
| 318 |
co_yield static_cast<yielded>(*i);
|
| 319 |
}
|
| 320 |
};
|
| 321 |
return yield_value(ranges::elements_of(nested(
|
|
@@ -340,15 +344,13 @@ is `*this` is the sole element of `*x.`*`active_`*, equivalent to
|
|
| 340 |
``` cpp
|
| 341 |
void* operator new(size_t size)
|
| 342 |
requires same_as<Allocator, void> || default_initializable<Allocator>;
|
| 343 |
|
| 344 |
template<class Alloc, class... Args>
|
| 345 |
-
requires same_as<Allocator, void> || convertible_to<const Alloc&, Allocator>
|
| 346 |
void* operator new(size_t size, allocator_arg_t, const Alloc& alloc, const Args&...);
|
| 347 |
|
| 348 |
template<class This, class Alloc, class... Args>
|
| 349 |
-
requires same_as<Allocator, void> || convertible_to<const Alloc&, Allocator>
|
| 350 |
void* operator new(size_t size, const This&, allocator_arg_t, const Alloc& alloc,
|
| 351 |
const Args&...);
|
| 352 |
```
|
| 353 |
|
| 354 |
Let `A` be
|
|
@@ -359,11 +361,14 @@ Let `A` be
|
|
| 359 |
|
| 360 |
Let `B` be `allocator_traits<A>::template rebind_alloc<U>` where `U` is
|
| 361 |
an unspecified type whose size and alignment are both
|
| 362 |
\_\_STDCPP_DEFAULT_NEW_ALIGNMENT\_\_.
|
| 363 |
|
| 364 |
-
*Mandates:* `allocator_traits<B>::pointer` is a pointer type.
|
|
|
|
|
|
|
|
|
|
| 365 |
|
| 366 |
*Effects:* Initializes an allocator `b` of type `B` with `A(alloc)`, for
|
| 367 |
the overloads with a function parameter `alloc`, and with `A()`
|
| 368 |
otherwise. Uses `b` to allocate storage for the smallest array of `U`
|
| 369 |
sufficient to provide storage for a coroutine state of size `size`, and
|
|
@@ -385,12 +390,12 @@ allocator equivalent to that used to allocate it.
|
|
| 385 |
|
| 386 |
### Class `generator::iterator` <a id="coro.generator.iterator">[[coro.generator.iterator]]</a>
|
| 387 |
|
| 388 |
``` cpp
|
| 389 |
namespace std {
|
| 390 |
-
template<class Ref, class
|
| 391 |
-
class generator<Ref,
|
| 392 |
public:
|
| 393 |
using value_type = value;
|
| 394 |
using difference_type = ptrdiff_t;
|
| 395 |
|
| 396 |
iterator(iterator&& other) noexcept;
|
|
@@ -457,10 +462,11 @@ friend bool operator==(const iterator& i, default_sentinel_t);
|
|
| 457 |
```
|
| 458 |
|
| 459 |
*Effects:* Equivalent to: `return i.`*`coroutine_`*`.done();`
|
| 460 |
|
| 461 |
<!-- Link reference definitions -->
|
|
|
|
| 462 |
[basic.lookup.argdep]: basic.md#basic.lookup.argdep
|
| 463 |
[concepts.equality]: concepts.md#concepts.equality
|
| 464 |
[containers]: containers.md#containers
|
| 465 |
[conv.rval]: expr.md#conv.rval
|
| 466 |
[coro.generator]: #coro.generator
|
|
@@ -474,10 +480,11 @@ friend bool operator==(const iterator& i, default_sentinel_t);
|
|
| 474 |
[dcl.init.general]: dcl.md#dcl.init.general
|
| 475 |
[expr.await]: expr.md#expr.await
|
| 476 |
[expr.const]: expr.md#expr.const
|
| 477 |
[expr.yield]: expr.md#expr.yield
|
| 478 |
[generator.syn]: #generator.syn
|
|
|
|
| 479 |
[iterator.concept.bidir]: iterators.md#iterator.concept.bidir
|
| 480 |
[iterator.concept.forward]: iterators.md#iterator.concept.forward
|
| 481 |
[iterator.concept.iterator]: iterators.md#iterator.concept.iterator
|
| 482 |
[iterator.concept.output]: iterators.md#iterator.concept.output
|
| 483 |
[iterator.concept.random.access]: iterators.md#iterator.concept.random.access
|
|
@@ -509,16 +516,22 @@ friend bool operator==(const iterator& i, default_sentinel_t);
|
|
| 509 |
[range.adjacent.transform.sentinel]: #range.adjacent.transform.sentinel
|
| 510 |
[range.adjacent.transform.view]: #range.adjacent.transform.view
|
| 511 |
[range.adjacent.view]: #range.adjacent.view
|
| 512 |
[range.all]: #range.all
|
| 513 |
[range.all.general]: #range.all.general
|
|
|
|
| 514 |
[range.as.const]: #range.as.const
|
| 515 |
[range.as.const.overview]: #range.as.const.overview
|
| 516 |
[range.as.const.view]: #range.as.const.view
|
| 517 |
[range.as.rvalue]: #range.as.rvalue
|
| 518 |
[range.as.rvalue.overview]: #range.as.rvalue.overview
|
| 519 |
[range.as.rvalue.view]: #range.as.rvalue.view
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 520 |
[range.cartesian]: #range.cartesian
|
| 521 |
[range.cartesian.iterator]: #range.cartesian.iterator
|
| 522 |
[range.cartesian.overview]: #range.cartesian.overview
|
| 523 |
[range.cartesian.view]: #range.cartesian.view
|
| 524 |
[range.chunk]: #range.chunk
|
|
@@ -534,10 +547,14 @@ friend bool operator==(const iterator& i, default_sentinel_t);
|
|
| 534 |
[range.chunk.view.fwd]: #range.chunk.view.fwd
|
| 535 |
[range.chunk.view.input]: #range.chunk.view.input
|
| 536 |
[range.common]: #range.common
|
| 537 |
[range.common.overview]: #range.common.overview
|
| 538 |
[range.common.view]: #range.common.view
|
|
|
|
|
|
|
|
|
|
|
|
|
| 539 |
[range.counted]: #range.counted
|
| 540 |
[range.dangling]: #range.dangling
|
| 541 |
[range.drop]: #range.drop
|
| 542 |
[range.drop.overview]: #range.drop.overview
|
| 543 |
[range.drop.view]: #range.drop.view
|
|
@@ -595,10 +612,11 @@ friend bool operator==(const iterator& i, default_sentinel_t);
|
|
| 595 |
[range.owning.view]: #range.owning.view
|
| 596 |
[range.prim.cdata]: #range.prim.cdata
|
| 597 |
[range.prim.data]: #range.prim.data
|
| 598 |
[range.prim.empty]: #range.prim.empty
|
| 599 |
[range.prim.size]: #range.prim.size
|
|
|
|
| 600 |
[range.prim.ssize]: #range.prim.ssize
|
| 601 |
[range.range]: #range.range
|
| 602 |
[range.ref.view]: #range.ref.view
|
| 603 |
[range.refinements]: #range.refinements
|
| 604 |
[range.repeat]: #range.repeat
|
|
@@ -639,10 +657,14 @@ friend bool operator==(const iterator& i, default_sentinel_t);
|
|
| 639 |
[range.take.view]: #range.take.view
|
| 640 |
[range.take.while]: #range.take.while
|
| 641 |
[range.take.while.overview]: #range.take.while.overview
|
| 642 |
[range.take.while.sentinel]: #range.take.while.sentinel
|
| 643 |
[range.take.while.view]: #range.take.while.view
|
|
|
|
|
|
|
|
|
|
|
|
|
| 644 |
[range.transform]: #range.transform
|
| 645 |
[range.transform.iterator]: #range.transform.iterator
|
| 646 |
[range.transform.overview]: #range.transform.overview
|
| 647 |
[range.transform.sentinel]: #range.transform.sentinel
|
| 648 |
[range.transform.view]: #range.transform.view
|
|
|
|
| 31 |
### Header `<generator>` synopsis <a id="generator.syn">[[generator.syn]]</a>
|
| 32 |
|
| 33 |
``` cpp
|
| 34 |
namespace std {
|
| 35 |
// [coro.generator.class], class template generator
|
| 36 |
+
template<class Ref, class Val = void, class Allocator = void>
|
| 37 |
class generator;
|
| 38 |
|
| 39 |
namespace pmr {
|
| 40 |
+
template<class Ref, class Val = void>
|
| 41 |
+
using generator = std::generator<Ref, Val, polymorphic_allocator<>>;
|
| 42 |
}
|
| 43 |
}
|
| 44 |
```
|
| 45 |
|
| 46 |
### Class template `generator` <a id="coro.generator.class">[[coro.generator.class]]</a>
|
| 47 |
|
| 48 |
``` cpp
|
| 49 |
namespace std {
|
| 50 |
+
template<class Ref, class Val = void, class Allocator = void>
|
| 51 |
+
class generator : public ranges::view_interface<generator<Ref, Val, Allocator>> {
|
| 52 |
private:
|
| 53 |
+
using value = conditional_t<is_void_v<Val>, remove_cvref_t<Ref>, Val>; // exposition only
|
| 54 |
+
using reference = conditional_t<is_void_v<Val>, Ref&&, Ref>; // exposition only
|
| 55 |
|
| 56 |
// [coro.generator.iterator], class generator::iterator
|
| 57 |
class iterator; // exposition only
|
| 58 |
|
| 59 |
public:
|
|
|
|
| 112 |
generator(generator&& other) noexcept;
|
| 113 |
```
|
| 114 |
|
| 115 |
*Effects:* Initializes *coroutine\_* with
|
| 116 |
`exchange(other.`*`coroutine_`*`, {})` and *active\_* with
|
| 117 |
+
`exchange(other.`*`active_`*`, nullptr)`.
|
| 118 |
|
| 119 |
[*Note 1*: Iterators previously obtained from `other` are not
|
| 120 |
invalidated; they become iterators into `*this`. — *end note*]
|
| 121 |
|
| 122 |
``` cpp
|
|
|
|
| 176 |
|
| 177 |
### Class `generator::promise_type` <a id="coro.generator.promise">[[coro.generator.promise]]</a>
|
| 178 |
|
| 179 |
``` cpp
|
| 180 |
namespace std {
|
| 181 |
+
template<class Ref, class Val, class Allocator>
|
| 182 |
+
class generator<Ref, Val, Allocator>::promise_type {
|
| 183 |
public:
|
| 184 |
generator get_return_object() noexcept;
|
| 185 |
|
| 186 |
suspend_always initial_suspend() const noexcept { return {}; }
|
| 187 |
auto final_suspend() noexcept;
|
|
|
|
| 193 |
constructible_from<remove_cvref_t<yielded>, const remove_reference_t<yielded>&>;
|
| 194 |
|
| 195 |
template<class R2, class V2, class Alloc2, class Unused>
|
| 196 |
requires same_as<typename generator<R2, V2, Alloc2>::yielded, yielded>
|
| 197 |
auto yield_value(ranges::elements_of<generator<R2, V2, Alloc2>&&, Unused> g) noexcept;
|
| 198 |
+
template<class R2, class V2, class Alloc2, class Unused>
|
| 199 |
+
requires same_as<typename generator<R2, V2, Alloc2>::yielded, yielded>
|
| 200 |
+
auto yield_value(ranges::elements_of<generator<R2, V2, Alloc2>&, Unused> g) noexcept;
|
| 201 |
|
| 202 |
template<ranges::input_range R, class Alloc>
|
| 203 |
requires convertible_to<ranges::range_reference_t<R>, yielded>
|
| 204 |
+
auto yield_value(ranges::elements_of<R, Alloc> r);
|
| 205 |
|
| 206 |
void await_transform() = delete;
|
| 207 |
|
| 208 |
void return_void() const noexcept {}
|
| 209 |
void unhandled_exception();
|
| 210 |
|
| 211 |
void* operator new(size_t size)
|
| 212 |
requires same_as<Allocator, void> || default_initializable<Allocator>;
|
| 213 |
|
| 214 |
template<class Alloc, class... Args>
|
|
|
|
| 215 |
void* operator new(size_t size, allocator_arg_t, const Alloc& alloc, const Args&...);
|
| 216 |
|
| 217 |
template<class This, class Alloc, class... Args>
|
|
|
|
| 218 |
void* operator new(size_t size, const This&, allocator_arg_t, const Alloc& alloc,
|
| 219 |
const Args&...);
|
| 220 |
|
| 221 |
void operator delete(void* pointer, size_t size) noexcept;
|
| 222 |
|
|
|
|
| 283 |
|
| 284 |
``` cpp
|
| 285 |
template<class R2, class V2, class Alloc2, class Unused>
|
| 286 |
requires same_as<typename generator<R2, V2, Alloc2>::yielded, yielded>
|
| 287 |
auto yield_value(ranges::elements_of<generator<R2, V2, Alloc2>&&, Unused> g) noexcept;
|
| 288 |
+
template<class R2, class V2, class Alloc2, class Unused>
|
| 289 |
+
requires same_as<typename generator<R2, V2, Alloc2>::yielded, yielded>
|
| 290 |
+
auto yield_value(ranges::elements_of<generator<R2, V2, Alloc2>&, Unused> g) noexcept;
|
| 291 |
```
|
| 292 |
|
| 293 |
*Preconditions:* A handle referring to the coroutine whose promise
|
| 294 |
object is `*this` is at the top of `*`*`active_`* of some `generator`
|
| 295 |
object `x`. The coroutine referred to by `g.range.`*`coroutine_`* is
|
|
|
|
| 302 |
execution of the coroutine referred to by `g.range.`*`coroutine_`*, and
|
| 303 |
whose member `await_resume` evaluates `rethrow_exception(`*`except_`*`)`
|
| 304 |
if `bool(`*`except_`*`)` is `true`. If `bool(`*`except_`*`)` is `false`,
|
| 305 |
the `await_resume` member has no effects.
|
| 306 |
|
| 307 |
+
*Remarks:* A *yield-expression* that calls one of these functions has
|
| 308 |
+
type `void` [[expr.yield]].
|
| 309 |
|
| 310 |
``` cpp
|
| 311 |
template<ranges::input_range R, class Alloc>
|
| 312 |
requires convertible_to<ranges::range_reference_t<R>, yielded>
|
| 313 |
+
auto yield_value(ranges::elements_of<R, Alloc> r);
|
| 314 |
```
|
| 315 |
|
| 316 |
*Effects:* Equivalent to:
|
| 317 |
|
| 318 |
``` cpp
|
| 319 |
auto nested = [](allocator_arg_t, Alloc, ranges::iterator_t<R> i, ranges::sentinel_t<R> s)
|
| 320 |
+
-> generator<yielded, void, Alloc> {
|
| 321 |
for (; i != s; ++i) {
|
| 322 |
co_yield static_cast<yielded>(*i);
|
| 323 |
}
|
| 324 |
};
|
| 325 |
return yield_value(ranges::elements_of(nested(
|
|
|
|
| 344 |
``` cpp
|
| 345 |
void* operator new(size_t size)
|
| 346 |
requires same_as<Allocator, void> || default_initializable<Allocator>;
|
| 347 |
|
| 348 |
template<class Alloc, class... Args>
|
|
|
|
| 349 |
void* operator new(size_t size, allocator_arg_t, const Alloc& alloc, const Args&...);
|
| 350 |
|
| 351 |
template<class This, class Alloc, class... Args>
|
|
|
|
| 352 |
void* operator new(size_t size, const This&, allocator_arg_t, const Alloc& alloc,
|
| 353 |
const Args&...);
|
| 354 |
```
|
| 355 |
|
| 356 |
Let `A` be
|
|
|
|
| 361 |
|
| 362 |
Let `B` be `allocator_traits<A>::template rebind_alloc<U>` where `U` is
|
| 363 |
an unspecified type whose size and alignment are both
|
| 364 |
\_\_STDCPP_DEFAULT_NEW_ALIGNMENT\_\_.
|
| 365 |
|
| 366 |
+
*Mandates:* `allocator_traits<B>::pointer` is a pointer type. For the
|
| 367 |
+
overloads with a template parameter `Alloc`,
|
| 368 |
+
`same_as<Allocator, void> || convertible_to<const Alloc&, Allocator>` is
|
| 369 |
+
modeled.
|
| 370 |
|
| 371 |
*Effects:* Initializes an allocator `b` of type `B` with `A(alloc)`, for
|
| 372 |
the overloads with a function parameter `alloc`, and with `A()`
|
| 373 |
otherwise. Uses `b` to allocate storage for the smallest array of `U`
|
| 374 |
sufficient to provide storage for a coroutine state of size `size`, and
|
|
|
|
| 390 |
|
| 391 |
### Class `generator::iterator` <a id="coro.generator.iterator">[[coro.generator.iterator]]</a>
|
| 392 |
|
| 393 |
``` cpp
|
| 394 |
namespace std {
|
| 395 |
+
template<class Ref, class Val, class Allocator>
|
| 396 |
+
class generator<Ref, Val, Allocator>::iterator {
|
| 397 |
public:
|
| 398 |
using value_type = value;
|
| 399 |
using difference_type = ptrdiff_t;
|
| 400 |
|
| 401 |
iterator(iterator&& other) noexcept;
|
|
|
|
| 462 |
```
|
| 463 |
|
| 464 |
*Effects:* Equivalent to: `return i.`*`coroutine_`*`.done();`
|
| 465 |
|
| 466 |
<!-- Link reference definitions -->
|
| 467 |
+
[algorithms]: algorithms.md#algorithms
|
| 468 |
[basic.lookup.argdep]: basic.md#basic.lookup.argdep
|
| 469 |
[concepts.equality]: concepts.md#concepts.equality
|
| 470 |
[containers]: containers.md#containers
|
| 471 |
[conv.rval]: expr.md#conv.rval
|
| 472 |
[coro.generator]: #coro.generator
|
|
|
|
| 480 |
[dcl.init.general]: dcl.md#dcl.init.general
|
| 481 |
[expr.await]: expr.md#expr.await
|
| 482 |
[expr.const]: expr.md#expr.const
|
| 483 |
[expr.yield]: expr.md#expr.yield
|
| 484 |
[generator.syn]: #generator.syn
|
| 485 |
+
[intro.races]: basic.md#intro.races
|
| 486 |
[iterator.concept.bidir]: iterators.md#iterator.concept.bidir
|
| 487 |
[iterator.concept.forward]: iterators.md#iterator.concept.forward
|
| 488 |
[iterator.concept.iterator]: iterators.md#iterator.concept.iterator
|
| 489 |
[iterator.concept.output]: iterators.md#iterator.concept.output
|
| 490 |
[iterator.concept.random.access]: iterators.md#iterator.concept.random.access
|
|
|
|
| 516 |
[range.adjacent.transform.sentinel]: #range.adjacent.transform.sentinel
|
| 517 |
[range.adjacent.transform.view]: #range.adjacent.transform.view
|
| 518 |
[range.adjacent.view]: #range.adjacent.view
|
| 519 |
[range.all]: #range.all
|
| 520 |
[range.all.general]: #range.all.general
|
| 521 |
+
[range.approximately.sized]: #range.approximately.sized
|
| 522 |
[range.as.const]: #range.as.const
|
| 523 |
[range.as.const.overview]: #range.as.const.overview
|
| 524 |
[range.as.const.view]: #range.as.const.view
|
| 525 |
[range.as.rvalue]: #range.as.rvalue
|
| 526 |
[range.as.rvalue.overview]: #range.as.rvalue.overview
|
| 527 |
[range.as.rvalue.view]: #range.as.rvalue.view
|
| 528 |
+
[range.cache.latest]: #range.cache.latest
|
| 529 |
+
[range.cache.latest.iterator]: #range.cache.latest.iterator
|
| 530 |
+
[range.cache.latest.overview]: #range.cache.latest.overview
|
| 531 |
+
[range.cache.latest.sentinel]: #range.cache.latest.sentinel
|
| 532 |
+
[range.cache.latest.view]: #range.cache.latest.view
|
| 533 |
[range.cartesian]: #range.cartesian
|
| 534 |
[range.cartesian.iterator]: #range.cartesian.iterator
|
| 535 |
[range.cartesian.overview]: #range.cartesian.overview
|
| 536 |
[range.cartesian.view]: #range.cartesian.view
|
| 537 |
[range.chunk]: #range.chunk
|
|
|
|
| 547 |
[range.chunk.view.fwd]: #range.chunk.view.fwd
|
| 548 |
[range.chunk.view.input]: #range.chunk.view.input
|
| 549 |
[range.common]: #range.common
|
| 550 |
[range.common.overview]: #range.common.overview
|
| 551 |
[range.common.view]: #range.common.view
|
| 552 |
+
[range.concat]: #range.concat
|
| 553 |
+
[range.concat.iterator]: #range.concat.iterator
|
| 554 |
+
[range.concat.overview]: #range.concat.overview
|
| 555 |
+
[range.concat.view]: #range.concat.view
|
| 556 |
[range.counted]: #range.counted
|
| 557 |
[range.dangling]: #range.dangling
|
| 558 |
[range.drop]: #range.drop
|
| 559 |
[range.drop.overview]: #range.drop.overview
|
| 560 |
[range.drop.view]: #range.drop.view
|
|
|
|
| 612 |
[range.owning.view]: #range.owning.view
|
| 613 |
[range.prim.cdata]: #range.prim.cdata
|
| 614 |
[range.prim.data]: #range.prim.data
|
| 615 |
[range.prim.empty]: #range.prim.empty
|
| 616 |
[range.prim.size]: #range.prim.size
|
| 617 |
+
[range.prim.size.hint]: #range.prim.size.hint
|
| 618 |
[range.prim.ssize]: #range.prim.ssize
|
| 619 |
[range.range]: #range.range
|
| 620 |
[range.ref.view]: #range.ref.view
|
| 621 |
[range.refinements]: #range.refinements
|
| 622 |
[range.repeat]: #range.repeat
|
|
|
|
| 657 |
[range.take.view]: #range.take.view
|
| 658 |
[range.take.while]: #range.take.while
|
| 659 |
[range.take.while.overview]: #range.take.while.overview
|
| 660 |
[range.take.while.sentinel]: #range.take.while.sentinel
|
| 661 |
[range.take.while.view]: #range.take.while.view
|
| 662 |
+
[range.to.input]: #range.to.input
|
| 663 |
+
[range.to.input.iterator]: #range.to.input.iterator
|
| 664 |
+
[range.to.input.overview]: #range.to.input.overview
|
| 665 |
+
[range.to.input.view]: #range.to.input.view
|
| 666 |
[range.transform]: #range.transform
|
| 667 |
[range.transform.iterator]: #range.transform.iterator
|
| 668 |
[range.transform.overview]: #range.transform.overview
|
| 669 |
[range.transform.sentinel]: #range.transform.sentinel
|
| 670 |
[range.transform.view]: #range.transform.view
|