@@ -25,6 +25,7 @@ namespace std::execution {
2525* derived_from[link /reference/concepts/derived_from.md]
2626* sender[link sender.md]
2727* queryable[link ../queryable.md]
28+ * schedule[link schedule.md.nolink]
2829* get_completion_scheduler[link get_completion_scheduler.md.nolink]
2930* set_value_t[link set_value.md]
3031* get_env[link get_env.md]
@@ -36,11 +37,47 @@ namespace std::execution {
3637
3738下記をみたすクラス型はSchedulerとみなせる。
3839
39- - `scheduler_t`をメンバ型`Sch::scheduler_concept`として定義するクラス
40- - [クエリ可能オブジェクト](../queryable.md)であること
41- - `Sch`型の値`sch`に対して下記が有効な式であること
42- - [`execution::schedule`](schedule.md.nolink)`(sch)`が[Sender](sender.md)を返すこと
43- - [`execution::get_completion_scheduler`](get_completion_scheduler.md.nolink)`<`[`set_value_t`](set_value.md)`>(`[`execution::get_env`](get_env.md)`(`[`execution::schedule`](schedule.md.nolink)`(sch)))`の結果が`Sch`型に等しいこと
40+ - `scheduler_t`をメンバ型`Sch::scheduler_concept`として定義する
41+ - [クエリ可能オブジェクト](../queryable.md)である
42+ - `Sch`型の値`sch`に対して下記を満たすこと
43+ - [`execution::schedule`](schedule.md.nolink)`(sch)`が[Sender](sender.md)を返す
44+ - 上記Senderの[値完了関数](set_value.md)の[完了Scheduler](get_completion_scheduler.md.nolink)が`Sch`に等しいこと
45+ - コピー可能かつ同値比較可能
46+
47+
48+ ## モデル
49+ 説明専用のエイリアステンプレート`value-signature`, コンセプト`sender-in-of`を下記の通り定義する。
50+
51+ ```cpp
52+ namespace std::execution {
53+ template<class... As>
54+ using value-signature = set_value_t(As...);
55+
56+ template<class Sndr, class Env, class... Values>
57+ concept sender-in-of =
58+ sender_in<Sndr, Env> &&
59+ MATCHING-SIG(
60+ set_value_t(Values...),
61+ value_types_of_t<Sndr, Env, value-signature, type_identity_t>);
62+ }
63+ ```
64+ * set_value_t[ link set_value.md]
65+ * sender_in[ link sender_in.md]
66+ * value_types_of_t[ link value_types_of_t.md.nolink]
67+ * type_identity_t[ link /reference/type_traits/true_type.md]
68+
69+ 型` Sch ` を` scheduler ` の型、型` Env ` を[ ` sender_in ` ] ( sender_in.md ) ` <schedule_result_t<Sch>, Env> ` を満たす実行環境の型としたとき、` sender-in-of<schedule_result_t<Sch>, Env> ` のモデルとなること。
70+
71+ [ `copyable`](/reference/concepts/copyable.md)`<remove_cvref_t <Sch>>`および[`equality_comparable`](/reference/concepts/equality_comparable.md)`<remove_cvref_t <Sch>>`により要求される操作は、例外で終了してはならない。
72+ これらの操作やScheduler型の[`schedule`](schedule.md.nolink)関数は、異なるスレッドから同時に操作を呼び出す可能性がある場合でも、データ競合を引き起こしてはならない。
73+
74+ あるScheduler型`Sch`の2 つの値`sch1`と`sch2`に対して、`sch1`と`sch2`が同じ実行リソースを共有する場合に限って、`sch1 == sch2`は`true `となる。
75+
76+ あるScheduler`sch`に対して、式[`get_completion_scheduler`](get_completion_scheduler.md.nolink)`<`[`set_value_t `](set_value.md)`>(`[`get_env`](get_env.md)`(`[`schedule`](schedule.md.nolink)`(sch)))`が`sch`と等しいこと。
77+
78+ あるScheduler`sch`に対して式[`get_domain`](get_domain.md)`(sch)`が適格であるとき、式`get_domain(`[`get_env`](get_env.md)`(schedule(sch)))`も適格であり、かつ同じ型を持つ。
79+
80+ Scheduler型のデストラクタは、`schedule`が返すSenderオブジェクトに接続されたReceiverの完了を待機してブロックしてはならない。
4481
4582
4683## 例
0 commit comments