namespace std::execution {
struct set_value_t { unspecified }; // タグ型
inline constexpr set_value_t set_value{};
}
概要
set_valueは、非同期操作の正常完了を表現する値(value)完了関数である。完了関数の呼び出しは完了操作と呼ばれる。
値完了関数には完了タグset_value_tが関連付けられ、完了操作の値完了シグネチャは戻り値型set_value_tと任意個の引数を持つ関数型として表現される。
効果
- 引数
rcvrが左辺値またはconst右辺値の場合、式set_value(rcvr, vs...)は不適格となる。 - そうでなければ、
rcvr.set_value(vs...)と等価である。
例外
投げない
カスタマイゼーションポイント
Receiver型の非const右辺値rcvrに対して式rcvr.set_value(vs...)が呼び出される。
このとき、noexcept(rcvr.set_value(vs...)) == trueであること。
説明専用エンティティ
式SET-VALUE
説明用の式rcvr, exprに対して、説明専用の式SET-VALUE(rcvr, expr)は下記と等価である。
式TRY-EVAL
説明用の式rcvr, exprに対して、説明専用の式TRY-EVAL(rcvr, expr)は下記と等価である。
-
exprが潜在的に例外送出するならば、下記と等価。try { expr; } catch(...) { set_error(std::move(rcvr), current_exception()); } -
そうでなければ、式
expr
式TRY-SET-VALUE
説明用の式rcvr, exprに対して、説明専用の式TRY-SET-VALUE(rcvr, expr)はrcvrが1回だけ評価されることを除いて、下記と等価。
TRY-EVAL(rcvr, SET-VALUE(rcvr, expr))
型SET-VALUE-SIG
説明用の型Tに対して、説明専用の型SET-VALUE-SIG(T)を下記の通り定義する。
TがCV修飾されたvoidならば、型set_value_t()- そうでなければ、型
set_value_t(T)
備考
完了関数set_valueはSender内部実装から呼び出される想定であり、実行制御ライブラリ利用者が直接利用する必要はない。
例
#include <execution>
namespace ex = std::execution;
struct ValueReceiver {
using receiver_concept = ex::receiver_t;
// 値完了シグネチャ set_value_t(int, int)
void set_value(int, int) && noexcept {}
};
int main()
{
ValueReceiver rcvr;
ex::set_value(std::move(rcvr), 1, 2);
}
出力
バージョン
言語
- C++26
処理系
- Clang: ??
- GCC: ??
- ICC: ??
- Visual C++: ??