|
1094 | 1094 |
|
1095 | 1095 | \rSec1[exec.opstate]{Operation states}
|
1096 | 1096 |
|
| 1097 | +\rSec2[exec.opstate.general]{General} |
| 1098 | + |
| 1099 | +\pnum |
| 1100 | +The \libconcept{operation_state} concept defines |
| 1101 | +the requirements of an operation state type\iref{async.ops}. |
| 1102 | +\begin{codeblock} |
| 1103 | +namespace std::execution { |
| 1104 | + template<class O> |
| 1105 | + concept @\deflibconcept{operation_state}@ = |
| 1106 | + @\libconcept{derived_from}@<typename O::operation_state_concept, operation_state_t> && |
| 1107 | + is_object_v<O> && |
| 1108 | + requires (O& o) { |
| 1109 | + { start(o) } noexcept; |
| 1110 | + }; |
| 1111 | +} |
| 1112 | +\end{codeblock} |
| 1113 | + |
| 1114 | +\pnum |
| 1115 | +If an \libconcept{operation_state} object is destroyed |
| 1116 | +during the lifetime of its asynchronous operation\iref{async.ops}, |
| 1117 | +the behavior is undefined. |
| 1118 | +\begin{note} |
| 1119 | +The \libconcept{operation_state} concept does not impose requirements |
| 1120 | +on any operations other than destruction and \tcode{start}, |
| 1121 | +including copy and move operations. |
| 1122 | +Invoking any such operation on an object |
| 1123 | +whose type models \libconcept{operation_state} can lead to undefined behavior. |
| 1124 | +\end{note} |
| 1125 | + |
| 1126 | +\pnum |
| 1127 | +The program is ill-formed |
| 1128 | +if it performs a copy or move construction or assigment operation on |
| 1129 | +an operation state object created by connecting a library-provided sender. |
| 1130 | + |
| 1131 | +\rSec2[exec.opstate.start]{\tcode{execution::start}} |
| 1132 | + |
| 1133 | +\pnum |
| 1134 | +The name \tcode{start} denotes a customization point object |
| 1135 | +that starts\iref{async.ops} |
| 1136 | +the asynchronous operation associated with the operation state object. |
| 1137 | +For a subexpression \tcode{op}, |
| 1138 | +the expression \tcode{start(op)} is ill-formed |
| 1139 | +if \tcode{op} is an rvalue. |
| 1140 | +Otherwise, it is expression-equivalent to |
| 1141 | +\tcode{\exposid{MANDATE-NOTHROW}(op.start())}. |
| 1142 | + |
| 1143 | +\pnum |
| 1144 | +If \tcode{op.start()} does not start\iref{async.ops} |
| 1145 | +the asynchronous operation associated with the operation state \tcode{op}, |
| 1146 | +the behavior of calling \tcode{start(op)} is undefined. |
| 1147 | + |
1097 | 1148 | \rSec1[exec.snd]{Senders}
|
1098 | 1149 |
|
1099 | 1150 | \rSec1[exec.util]{Sender/receiver utilities}
|
|
0 commit comments