2
2
Title : `std::execution`
3
3
H1 : <code>std::execution</code>
4
4
Shortname : P2300
5
- Revision : 9
5
+ Revision : 10
6
6
Status : P
7
7
Group : WG21
8
+ Date : 2024-06-28
8
9
Audience : SG1, LEWG
9
10
Editor : Michał Dominiak, [email protected]
10
11
Editor : Georgy Evtushenko, [email protected]
@@ -1503,9 +1504,22 @@ The changes since R9 are as follows:
1503
1504
1504
1505
<b> Fixes:</b>
1505
1506
1507
+ * Fixed `connect` and `get_completion_signatures` to use `transform_sender`,
1508
+ as "[[P2999R3]] " proposed (but failed) to do. See "[[P3303R1]] " for details.
1509
+
1506
1510
* `ensure_started`, `start_detached`, `execute`, and `execute_may_block_caller`
1507
1511
are removed from the proposal. They are to be replaced with safer and more
1508
- structured APIs by [@P3149R3] .
1512
+ structured APIs by "[[P3149R3]] ". See "[[P3187R1]] " for details.
1513
+
1514
+ * Fixed a logic error in the specification of `split` that could have caused a
1515
+ receiver to be completed twice in some cases.
1516
+
1517
+ * Fixed `stopped_as_optional` to handle the case where the child sender
1518
+ completes with more than one value, in which case the `stopped_as_optional`
1519
+ sender completes with an `optional` of a `tuple` of the values.
1520
+
1521
+ * The `queryable`, `stoppable_source`, and `stoppable_callback_for` concepts
1522
+ have been made exposition-only.
1509
1523
1510
1524
<b> Enhancements:</b>
1511
1525
@@ -1515,18 +1529,35 @@ The changes since R9 are as follows:
1515
1529
* The `get_delegatee_scheduler` query has been renamed to
1516
1530
`get_delegation_scheduler`.
1517
1531
1532
+ * The `read` environment has been renamed to `read_env`.
1533
+
1534
+ * The nullary forms of the queries which returned instances of the `read_env`
1535
+ sender have been removed. That is, `get_scheduler()` is no longer another way
1536
+ to spell `read_env(get_scheduler)`. Same for the other queries.
1537
+
1538
+ * A feature test macro has been added: `__cpp_lib_senders`.
1539
+
1540
+ * `transfer` has been renamed to `continues_on`. `on` has been renamed to
1541
+ `starts_on`. A new `on` algorithm has been added that is a combination of
1542
+ `starts_on` and `continues_on` for performing work on a different context
1543
+ and automatically transitioning back to the starting one. See "[[P3175R3]] "
1544
+ for details.
1545
+
1518
1546
* An exposition-only <i> `simple-allocator`</i> concept is added to the
1519
1547
Library introduction ([library] ), and the specification of the
1520
1548
`get_allocator` query is expressed in terms of it.
1521
1549
1550
+ * An exposition-only <i> `write-env`</i> sender adaptor has been added for
1551
+ use in the implementation of the new `on` algorithm.
1552
+
1522
1553
## R9 ## {#r9}
1523
1554
1524
1555
The changes since R8 are as follows:
1525
1556
1526
1557
<b> Fixes:</b>
1527
1558
1528
1559
* The `tag_invoke` mechanism has been replaced with member functions
1529
- for customizations as per \ [P2855] (https://wg21.link/p2855) .
1560
+ for customizations as per " [[P2855R1]] " .
1530
1561
1531
1562
* Per guidance from LWG and LEWG, `receiver_adaptor` has been removed.
1532
1563
@@ -4275,7 +4306,6 @@ namespace std {
4275
4306
template<class CallbackFn>
4276
4307
class inplace_stop_callback;
4277
4308
4278
- <span class="ed-note"> Do we need the `::template` here?</span>
4279
4309
template<class T, class CallbackFn>
4280
4310
using stop_callback_for_t = T::template callback_type<CallbackFn>;</div>
4281
4311
}
@@ -6932,13 +6962,6 @@ namespace std::execution {
6932
6962
6933
6963
- Otherwise, `tag_of_t<Sndr>` is ill-formed.
6934
6964
6935
- <span class="ed-note">
6936
- There is no way in standard C++ to determine whether the above declaration
6937
- is well-formed without causing a hard error, so this presumes compiler
6938
- magic. However, the author anticipates the adoption of [@P2141R1] , which
6939
- makes it possible to implement this purely in the library. P2141 has already
6940
- been approved by EWG for C++26.</span>
6941
-
6942
6965
6. Let <i> `sender-for`</i> be an exposition-only concept defined as follows:
6943
6966
6944
6967
<pre highlight="c++">
@@ -7856,10 +7879,10 @@ namespace std::execution {
7856
7879
* `decltype((sch))` does not satisfy `scheduler`, or
7857
7880
7858
7881
* `decltype((sndr))` does not satisfy `sender` and `sndr` is not
7859
- a pipeable sender adaptor closure object ([exec.adapt.objects] ), or
7882
+ a pipeable sender adaptor closure object ([exec.adapt.objects] ), or
7860
7883
7861
7884
* `decltype((sndr))` satisfies `sender` and `sndr` is also
7862
- a pipeable sender adaptor closure object.
7885
+ a pipeable sender adaptor closure object.
7863
7886
7864
7887
3. Otherwise, if `decltype((sndr))` satisfies `sender`, the expression `on(sch,
7865
7888
sndr)` is expression-equivalent to:
@@ -9955,6 +9978,20 @@ void finish();
9955
9978
"pages": 2352,
9956
9979
"publisher": "The Open Journal",
9957
9980
"journal": "Journal of Open Source Software"
9981
+ },
9982
+
9983
+ "P3175R3": {
9984
+ "authors": ["Eric Niebler"] ,
9985
+ "href": "https://wg21.link/P3175R3",
9986
+ "title": "Reconsidering the std::execution::on algorithm",
9987
+ "date": "2024-06-24"
9988
+ },
9989
+
9990
+ "P3303R1": {
9991
+ "authors": ["Eric Niebler"] ,
9992
+ "href": "https://wg21.link/P3303R1",
9993
+ "title": "Fixing Lazy Sender Algorithm Customization",
9994
+ "date": "2024-06-24"
9958
9995
}
9959
9996
}
9960
9997
</pre>
0 commit comments