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++: ??