namespace std::execution {
template <class Sndr>
concept sender;
struct sender_t {}; // タグ型
template<class Sndr>
inline constexpr bool enable_sender = see below;
}
概要
senderは、型SndrがSender型の要件を満たすことを表すコンセプトである。
下記をみたすクラス型はSenderとみなせる。
- 下記いずれかを満たす
sender_tをメンバ型Sndr::sender_conceptとして定義するenable_sender変数テンプレートをtrueで特殊化する- コルーチンのAwaitable型
get_envで属性を取得できる- ムーブ可能
要件
説明専用コンセプトis-sender, enable-senderを以下のように定義する。
template<class Sndr>
concept is-sender =
derived_from<typename Sndr::sender_concept, sender_t>;
template<class Sndr>
concept enable-sender =
is-sender<Sndr> ||
is-awaitable<Sndr, env-promise<env<>>>;
enable_sender変数テンプレートを以下のように定義する。
template<class Sndr>
inline constexpr bool enable_sender = enable-sender<Sndr>;
senderコンセプトは、以下のように定義される。
template<class Sndr>
concept sender =
enable_sender<remove_cvref_t<Sndr>> &&
requires (const remove_cvref_t<Sndr>& sndr) {
{ get_env(sndr) } -> queryable;
} &&
move_constructible<remove_cvref_t<Sndr>> &&
constructible_from<remove_cvref_t<Sndr>, Sndr>;
備考
プログラム定義型がsenderコンセプトを満たす場合、ユーザはenable_sender変数テンプレートをtrueとして特殊化してもよい。そのような特殊化は定数式で利用可能かつconst bool型をもつこと。
例
#include <execution>
namespace ex = std::execution;
int main()
{
// 値42を送信するSender
ex::sender auto sndr = ex::just(42);
}
出力
バージョン
言語
- C++26
処理系
- Clang: ??
- GCC: ??
- ICC: ??
- Visual C++: ??