namespace std::execution {
template<class Rcvr>
concept receiver =
derived_from<typename remove_cvref_t<Rcvr>::receiver_concept, receiver_t> &&
requires(const remove_cvref_t<Rcvr>& rcvr) {
{ get_env(rcvr) } -> queryable;
} &&
move_constructible<remove_cvref_t<Rcvr>> &&
constructible_from<remove_cvref_t<Rcvr>, Rcvr>;
struct receiver_t {}; // タグ型
}
概要
receiver
は、型Rcvr
がReceiver型の要件を満たすことを表すコンセプトである。
下記をみたすクラス型はReceiverとみなせる。
モデル
final
指定されたクラス型はreceiver
のモデルではない。
例
#include <execution>
namespace ex = std::execution;
struct SinkReceiver {
using receiver_concept = ex::receiver_t;
void set_value(auto&&...) noexcept {}
void set_error(auto&&) noexcept {}
void set_stopped() noexcept {}
};
int main()
{
static_assert(ex::receiver<SinkReceiver>);
}
出力
バージョン
言語
- C++26
処理系
- Clang: ??
- GCC: ??
- ICC: ??
- Visual C++: ??