Skip to content

Commit 0ef6520

Browse files
committed
Fix 4007 links, acknowledgement and technical inaccuracies
1 parent 3282532 commit 0ef6520

File tree

1 file changed

+9
-9
lines changed

1 file changed

+9
-9
lines changed

source/d4007-senders-and-coros.md

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -46,24 +46,24 @@ The issues in this section are items where shipping forecloses the fix.
4646

4747
| Issue | References | Fixed |
4848
|-----------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|:-----:|
49-
| Allocator Timing | [D3980R0](https://isocpp.org/files/papers/D3980R0.html)<sup>[5]</sup>, [P3796R1](https://wg21.link/p3796r1)<sup>[3]</sup>, [LWG 4356](https://cplusplus.github.io/LWG/issue4356)<sup>[6]</sup>, [US 254-385](https://github.com/cplusplus/nbballot/issues/960)<sup>[7]</sup> | no |
50-
| Allocator Propagation | [D3980R0](https://isocpp.org/files/papers/D3980R0.html)<sup>[5]</sup>, [P3796R1](https://wg21.link/p3796r1)<sup>[3]</sup> | no |
49+
| Allocator Timing | [P3980R0](https://isocpp.org/files/papers/P3980R0.html)<sup>[5]</sup>, [P3796R1](https://wg21.link/p3796r1)<sup>[3]</sup>, [LWG 4356](https://cplusplus.github.io/LWG/issue4356)<sup>[6]</sup>, [US 254-385](https://github.com/cplusplus/nbballot/issues/960)<sup>[7]</sup> | no |
50+
| Allocator Propagation | [P3980R0](https://isocpp.org/files/papers/P3980R0.html)<sup>[5]</sup>, [P3796R1](https://wg21.link/p3796r1)<sup>[3]</sup> | no |
5151
| Error Return | [P3950R0](https://wg21.link/p3950r0)<sup>[8]</sup>, [P3801R0](https://wg21.link/p3801r0)<sup>[4]</sup>, [P1713R0](https://wg21.link/p1713r0)<sup>[9]</sup> | no |
52-
| Symmetric Transfer | [P2583R3](https://wg21.link/p2583r3)<sup>[10]</sup>, [US 246-373](https://github.com/cplusplus/nbballot/issues/948)<sup>[11]</sup>, [LWG 4348](https://cplusplus.github.io/LWG/issue4348)<sup>[12]</sup>, [P3801R0](https://wg21.link/p3801r0)<sup>[4]</sup>, [P3796R1](https://wg21.link/p3796r1)<sup>[3]</sup> | no |
52+
| Symmetric Transfer | [P2583R3](https://isocpp.org/files/papers/P2583R3.pdf)<sup>[10]</sup>, [US 246-373](https://github.com/cplusplus/nbballot/issues/948)<sup>[11]</sup>, [LWG 4348](https://cplusplus.github.io/LWG/issue4348)<sup>[12]</sup>, [P3801R0](https://wg21.link/p3801r0)<sup>[4]</sup>, [P3796R1](https://wg21.link/p3796r1)<sup>[3]</sup> | no |
5353

54-
- **Allocator Timing.** `task` does not allow the user to specify an allocator at the launch site for coroutine frame allocation. The `allocator_arg` mechanism in [P3552R3](https://wg21.link/p3552r3)<sup>[1]</sup> requires the allocator to appear in the coroutine's parameter list, which creates a timing problem: the frame is allocated before the parameters are evaluated. Shipping this interface locks in the parameter-list approach and forecloses alternative injection mechanisms.
54+
- **Allocator Timing.** `task` does not allow the user to specify an allocator at the launch site for coroutine frame allocation. The coroutine frame is allocated by `operator new` at the call site, before any sender `connect`/`start` machinery runs. The receiver's environment - which carries the allocator - is not yet available at that point. The `allocator_arg` mechanism in [P3552R3](https://wg21.link/p3552r3)<sup>[1]</sup> works around this by requiring the allocator in the coroutine's parameter list, but that locks in a caller-specified approach and forecloses environment-based injection.
5555

5656
- **Allocator Propagation.** `task` does not propagate the frame allocator to child tasks. Each child task allocates its frame independently. Shipping without propagation locks in a design where every launch site must specify its allocator explicitly, foreclosing transparent propagation through the coroutine call tree.
5757

5858
- **Error Return.** `task` requires `co_yield with_error(e)` to propagate an error to the caller. `co_return` cannot carry an error value because `return_value` and `return_void` are mutually exclusive in the current coroutine specification. Shipping this interface locks in the `co_yield` mechanism and forecloses `co_return`-based error propagation, which would require a language change.
5959

60-
- **Symmetric Transfer.** `sender-awaitable::await_suspend` returns `void`. When a sender completes synchronously inside `start()`, the receiver calls `handle.resume()` on the `await_suspend` stack, adding a frame per completion with no upper bound. Shipping this interface locks in the `void` return type and forecloses `coroutine_handle<>` return, which would enable symmetric transfer.
60+
- **Symmetric Transfer.** The completion functions (`set_value`, `set_error`, `set_stopped`) and `start()` return `void`, providing no channel to propagate a `coroutine_handle<>`. When a sender completes synchronously, the receiver calls `handle.resume()` on the caller's stack, adding a frame per completion with no upper bound. Shipping this protocol forecloses the `coroutine_handle<>`-returning completion protocol that would enable symmetric transfer.
6161

6262
---
6363

6464
## Acknowledgements
6565

66-
The authors thank Andrzej Krzemie&nacute;ski for feedback that sharpened the scope of this revision.
66+
The authors thank Andrzej Krzemie&nacute;ski for feedback that sharpened the scope of this revision. Thanks are also due to Dietmar K&uuml;hl, Michael Hava, Mark Hoemmen, Ian Petersen, and Ville Voutilainen for technical discussion that informed the analysis.
6767

6868
---
6969

@@ -77,16 +77,16 @@ Papers, issues, and ballot comments referenced in this document.
7777
2. [P4007R0](https://wg21.link/p4007r0) - "Senders and Coroutines" (Vinnie Falco, Mungo Gill, 2026). https://wg21.link/p4007r0
7878
3. [P3796R1](https://wg21.link/p3796r1) - "Coroutine Task Issues" (Dietmar K&uuml;hl, 2025). https://wg21.link/p3796r1
7979
4. [P3801R0](https://wg21.link/p3801r0) - "Concerns about the design of std::execution::task" (Jonathan M&uuml;ller, 2025). https://wg21.link/p3801r0
80-
5. [D3980R0](https://isocpp.org/files/papers/D3980R0.html) - "Task's Allocator Use" (Dietmar K&uuml;hl, 2026). https://isocpp.org/files/papers/D3980R0.html
80+
5. [P3980R0](https://isocpp.org/files/papers/P3980R0.html) - "Task's Allocator Use" (Dietmar K&uuml;hl, 2026). https://isocpp.org/files/papers/P3980R0.html
8181
6. [LWG 4356](https://cplusplus.github.io/LWG/issue4356) - "connect() should use get_allocator(get_env(rcvr))". https://cplusplus.github.io/LWG/issue4356
8282
7. [US 254-385](https://github.com/cplusplus/nbballot/issues/960) - C++26 NB ballot comment. https://github.com/cplusplus/nbballot/issues/960
8383
8. [P3950R0](https://wg21.link/p3950r0) - "return_value & return_void Are Not Mutually Exclusive" (Robert Leahy, 2025). https://wg21.link/p3950r0
8484
9. [P1713R0](https://wg21.link/p1713r0) - "Allowing both co_return; and co_return value; in the same coroutine" (Lewis Baker, 2019). https://wg21.link/p1713r0
85-
10. [P2583R3](https://wg21.link/p2583r3) - "Symmetric Transfer and Sender Composition" (Mungo Gill, Vinnie Falco, 2026). https://wg21.link/p2583r3
85+
10. [P2583R3](https://isocpp.org/files/papers/P2583R3.pdf) - "Symmetric Transfer and Sender Composition" (Mungo Gill, Vinnie Falco, 2026). https://isocpp.org/files/papers/P2583R3.pdf
8686
11. [US 246-373](https://github.com/cplusplus/nbballot/issues/948) - C++26 NB ballot comment. https://github.com/cplusplus/nbballot/issues/948
8787
12. [LWG 4348](https://cplusplus.github.io/LWG/issue4348) - "task doesn't support symmetric transfer". https://cplusplus.github.io/LWG/issue4348
88+
13. [P2300R10](https://wg21.link/p2300r10) - "std::execution" (Micha&lstrok; Dominiak et al., 2024). https://wg21.link/p2300r10
8889

8990
### Other
9091

91-
13. [P2300R10](https://wg21.link/p2300r10) - "std::execution" (Micha&lstrok; Dominiak et al., 2024). https://wg21.link/p2300r10
9292
14. [C++ Working Draft](https://eel.is/c++draft/) - (Richard Smith, ed.). https://eel.is/c++draft/

0 commit comments

Comments
 (0)