22<feed xmlns =" http://www.w3.org/2005/Atom" >
33 <title >cpprefjp - C++日本語リファレンス</title >
44 <link href =" https://cpprefjp.github.io" />
5- <updated >2026-06-07T09:08:37.004315 </updated >
6- <id >0feef85f-2327-4cec-a4ef-fe66f8341c62 </id >
5+ <updated >2026-06-07T09:34:28.101276 </updated >
6+ <id >8664d707-8f65-4349-8544-5b6ba2045ec5 </id >
77
88
9+ <entry >
10+ <title >execution -- execution: P4151R1対応(#1650)</title >
11+ <link href =" https://cpprefjp.github.io/reference/execution/execution.html" />
12+ <id >115f17d4667a2a4d2f2e3dcec1a6cadb25f5f20d:reference/execution/execution.md</id >
13+ <updated >2026-06-07T18:28:55+09:00</updated >
14+
15+ <summary type =" html" >< pre>< code> diff --git a/reference/execution/execution.md b/reference/execution/execution.md
16+ index cf5e3d776..bb6efdb6a 100644
17+ --- a/reference/execution/execution.md
18+ +++ b/reference/execution/execution.md
19+ @@ -163,7 +163,7 @@ Senderコンシューマは名前空間 `std::this_thread` および名前空間
20+ |------|------|----------------|
21+ | [`execution::as_awaitable`](execution/as_awaitable.md) | Senderを[Awaitable型](/lang/cpp20/coroutines.md)へ変換 (customization point object) | C++26 |
22+ | [`execution::with_awaitable_senders`](execution/with_awaitable_senders.md) | [Promise型](/lang/cpp20/coroutines.md)の基底クラス (class template) | C++26 |
23+ -| [`execution::affine_on`](execution/affine_on.md) | タスクコルーチンのScheduler Affinityを実現 (customization point object) | C++26 |
24+ +| [`execution::affine`](execution/affine.md) | タスクコルーチンのScheduler Affinityを実現 (customization point object) | C++26 |
25+ | [`execution::inline_scheduler`](execution/inline_scheduler.md) | インラインScheduler (class) | C++26 |
26+ | [`execution::task_scheduler`](execution/task_scheduler.md) | 任意Scheduler型を保持するScheduler (class) | C++26 |
27+ | [`execution::with_error`](execution/with_error.md) | タスクコルーチンからのエラー完了 (class template) | C++26 |
28+ @@ -207,3 +207,4 @@ Senderコンシューマは名前空間 `std::this_thread` および名前空間
29+ - [P3986R1 A Wording Strategy for Inlinable Receivers](https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2026/p3986r1.pdf)
30+ - [P3826R5 Fix Sender Algorithm Customization](https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2026/p3826r5.html)
31+ - [P3941R4 Scheduler Affinity](https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2026/p3941r4.html)
32+ +- [P4151R1 Rename `affine_on`](https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2026/p4151r1.pdf)
33+ < /code>< /pre> </summary >
34+
35+ <author >
36+ <name >yoh</name >
37+ <email >kawasaki.liamg@gmail.com</email >
38+ </author >
39+ </entry >
40+
41+ <entry >
42+ <title >affine -- execution: P4151R1対応(#1650)</title >
43+ <link href =" https://cpprefjp.github.io/reference/execution/execution/affine.html" />
44+ <id >115f17d4667a2a4d2f2e3dcec1a6cadb25f5f20d:reference/execution/execution/affine.md</id >
45+ <updated >2026-06-07T18:28:55+09:00</updated >
46+
47+ <summary type =" html" >< pre>< code> diff --git a/reference/execution/execution/affine.md b/reference/execution/execution/affine.md
48+ new file mode 100644
49+ index 000000000..ef01a5042
50+ --- /dev/null
51+ +++ b/reference/execution/execution/affine.md
52+ @@ -0,0 +1,94 @@
53+ +# affine
54+ +* execution[meta header]
55+ +* cpo[meta id-type]
56+ +* std::execution[meta namespace]
57+ +* cpp26[meta cpp]
58+ +
59+ +```cpp
60+ +namespace std::execution {
61+ + struct affine_t { unspecified };
62+ + inline constexpr affine_t affine{};
63+ +}
64+ +```
65+ +* unspecified[italic]
66+ +
67+ +## 概要
68+ +`affine`は、[Receiver](receiver.md)の[Scheduler](scheduler.md)上で完了させるSenderアダプタである。
69+ +アダプト対象Senderが正しいScheduler上で完了すると判断できるとき、アルゴリズムはスケジューリング操作を回避できる。
70+ +
71+ +`affine`は[パイプ可能Senderアダプタオブジェクト](sender_adaptor_closure.md)であり、パイプライン記法をサポートする。
72+ +
73+ +
74+ +## 効果
75+ +説明用の式`sndr`に対して、`decltype((sndr))`が[`sender`](sender.md)を満たさないとき、呼び出し式`affine(sndr)`は不適格となる。
76+ +
77+ +そうでなければ、呼び出し式`affine(sndr)`は下記と等価。
78+ +
79+ +```cpp
80+ +make-sender(affine, env& lt;& gt;(), sndr)
81+ +```
82+ +* make-sender[link make-sender.md]
83+ +* env& lt;& gt;[link env.md]
84+ +
85+ +
86+ +### Senderアルゴリズムタグ `affine`
87+ +型が[`scheduler`](scheduler.md)のモデルである部分式`sch`に対して、説明用の式`UNSTOPPABLE-SCHEDULER(sch)`を、その型が[`scheduler`](scheduler.md)のモデルである式`e`とする。
88+ +
89+ +- 式[`schedule`](schedule.md)`(e)`は[`unstoppable`](unstoppable.md)`(`[`schedule`](schedule.md)`(sch))`と等価な式。
90+ +- 任意の[クエリオブジェクト](../queryable.md)`q`と部分式のパック`args...`に対して、式`e.query(q, args...)`は`sch.query(q, args...)`と等価な式。
91+ +- 式`e == UNSTOPPABLE-SCHEDULER(other)`は`sch == other`と等価な式。
92+ +
93+ +説明用の式`sndr`と`ev`に対して、[`sender-for`](sender-for.md)`& lt;decltype((sndr)), affine_t& gt; == false`のとき、式`affine.transform_sender(sndr, ev)`は不適格となる。
94+ +
95+ +そうでなければ、式`affine.transform_sender(sndr, ev)`は下記と等価。
96+ +
97+ +```cpp
98+ +auto& amp; [_, _, child] = sndr;
99+ +if constexpr (requires { std::forward_like& lt;Sndr& gt;(child).affine(); }) {
100+ + return std::forward_like& lt;Sndr& gt;(child).affine();
101+ +} else {
102+ + return continues_on(std::forward_like& lt;Sndr& gt;(child),
103+ + UNSTOPPABLE-SCHEDULER(get_start_scheduler(ev)));
104+ +}
105+ +```
106+ +* continues_on[link continues_on.md]
107+ +* get_start_scheduler[link get_start_scheduler.md]
108+ +
109+ +
110+ +## カスタマイゼーションポイント
111+ +[Receiver](receiver.md)接続時に、関連付けられた実行ドメインに対して[`execution::transform_sender`](transform_sender.md)経由でSender変換が行われる。
112+ +[デフォルト実行ドメイン](default_domain.md)では無変換。
113+ +
114+ +説明用の式`out_sndr`を`affine(sndr)`の戻り値[Sender](sender.md)とし、型`OutSndr`を`decltype((out_sndr))`とする。式`out_rcvr`を[環境](../queryable.md)`Env`に関連付けられた[Receiver](receiver.md)とする。[`get_start_scheduler`](get_start_scheduler.md)`(`[`get_env`](get_env.md)`(out_rcvr))`が不適格もしくは[`infallible-scheduler`](infallible-scheduler.md)`& lt;Env& gt;`を満たさないとき、式[`get_completion_signatures`](get_completion_signatures.md)`& lt;OutSndr, Env& gt;()`の評価は例外で終了する。`out_sndr`と`out_rcvr`との[接続(connect)](connect.md)結果[Operation State](operation_state.md)への左辺値参照を`op`としたとき、
115+ +
116+ +- 呼び出し[`start`](start.md)`(op)`は、現在の実行エージェント上で入力[Sender](sender.md)`sndr`を開始し、[Scheduler](scheduler.md)`sch`に関連付けられた実行リソースに属する実行エージェント上で`out_rcvr`の完了操作が実行される。
117+ +- 現在の実行リソースが`sch`に関連付けられた実行リソースと同一のとき、[`start`](start.md)`(op)`の完了よりも前に`out_rcvr`の完了操作が呼ばれる可能性がある。
118+ +
119+ +
120+ +## 備考
121+ +`affine`は[タスクコルーチン](task.md)のScheduler Affinity実現に用いられる。
122+ +詳細仕様は[`task::promise::await_transform`](task/promise_type/await_transform.md)を参照のこと。
123+ +
124+ +開始された[Scheduler](scheduler.md)上で再開(resume)されると分かっている[Sender](sender.md)に対して、処理系(標準ライブラリ実装)は`affine`メンバ関数を提供すべきである。そのようなSenderの例として、[`just`](just.md), [`just_error`](just_error.md), [`just_stopped`](just_stopped.md), [`read_env`](read_env.md), [`write_env`](write_env.md)等がある。
125+ +
126+ +
127+ +## バージョン
128+ +### 言語
129+ +- C++26
130+ +
131+ +### 処理系
132+ +- [Clang](/implementation.md#clang): ??
133+ +- [GCC](/implementation.md#gcc): ??
134+ +- [ICC](/implementation.md#icc): ??
135+ +- [Visual C++](/implementation.md#visual_cpp): ??
136+ +
137+ +
138+ +## 関連項目
139+ +- [`execution::task`](task.md)
140+ +
141+ +
142+ +## 参照
143+ +- [P3552R3 Add a Coroutine Task Type](https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3552r3.html)
144+ +- [P3826R5 Fix Sender Algorithm Customization](https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2026/p3826r5.html)
145+ +- [P3941R4 Scheduler Affinity](https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2026/p3941r4.html)
146+ +- [P4151R1 Rename `affine_on`](https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2026/p4151r1.pdf)
147+ < /code>< /pre> </summary >
148+
149+ <author >
150+ <name >yoh</name >
151+ <email >kawasaki.liamg@gmail.com</email >
152+ </author >
153+ </entry >
154+
155+ <entry >
156+ <title >await_transform -- execution: P4151R1対応(#1650)</title >
157+ <link href =" https://cpprefjp.github.io/reference/execution/execution/task/promise_type/await_transform.html" />
158+ <id >115f17d4667a2a4d2f2e3dcec1a6cadb25f5f20d:reference/execution/execution/task/promise_type/await_transform.md</id >
159+ <updated >2026-06-07T18:28:55+09:00</updated >
160+
161+ <summary type =" html" >< pre>< code> diff --git a/reference/execution/execution/task/promise_type/await_transform.md b/reference/execution/execution/task/promise_type/await_transform.md
162+ index 263eda056..afc1af070 100644
163+ --- a/reference/execution/execution/task/promise_type/await_transform.md
164+ +++ b/reference/execution/execution/task/promise_type/await_transform.md
165+ @@ -18,7 +18,7 @@ auto await_transform(Sender& amp;& amp; sndr); // (1)
166+
167+ ## 効果
168+ [`same_as`](/reference/concepts/same_as.md)`& lt;`[`inline_scheduler`](../../inline_scheduler.md)`,` [`start_scheduler_type`](../../task.md)`& gt; == true`ならば、[`as_awaitable`](../../as_awaitable.md)`(std::forward& lt;Sender& gt;(sndr), *this)`を返す。
169+ -そうでなければ、[`as_awaitable`](../../as_awaitable.md)`(`[`affine_on`](../../affine_on.md)`(std::forward& lt;Sender& gt;(sndr)), *this)`を返す。
170+ +そうでなければ、[`as_awaitable`](../../as_awaitable.md)`(`[`affine`](../../affine.md)`(std::forward& lt;Sender& gt;(sndr)), *this)`を返す。
171+
172+
173+ ## バージョン
174+ @@ -34,10 +34,11 @@ auto await_transform(Sender& amp;& amp; sndr); // (1)
175+
176+ ## 関連項目
177+ - [`execution::as_awaitable`](../../as_awaitable.md)
178+ -- [`execution::affine_on`](../../affine_on.md)
179+ +- [`execution::affine`](../../affine.md)
180+ - [`execution::inline_scheduler`](../../inline_scheduler.md)
181+
182+
183+ ## 参照
184+ - [P3552R3 Add a Coroutine Task Type](https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3552r3.html)
185+ - [P3941R4 Scheduler Affinity](https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2026/p3941r4.html)
186+ +- [P4151R1 Rename `affine_on`](https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2026/p4151r1.pdf)
187+ < /code>< /pre> </summary >
188+
189+ <author >
190+ <name >yoh</name >
191+ <email >kawasaki.liamg@gmail.com</email >
192+ </author >
193+ </entry >
194+
9195 <entry >
10196 <title >task_scheduler -- execution/task_scheduler: P3927R2対応(#1649)</title >
11197 <link href =" https://cpprefjp.github.io/reference/execution/execution/task_scheduler.html" />
@@ -864,29 +1050,4 @@ index 953a63e23..4b1a6bad8 100644
8641050 </author >
8651051 </entry >
8661052
867- <entry >
868- <title >get_start_scheduler -- execution/get_start_scheduler: 参照を修正(#1648)</title >
869- <link href =" https://cpprefjp.github.io/reference/execution/execution/get_start_scheduler.html" />
870- <id >ccd0fed2855e26859661b1d8e7ec89c2561784c9:reference/execution/execution/get_start_scheduler.md</id >
871- <updated >2026-06-07T10:45:20+09:00</updated >
872-
873- <summary type =" html" >< pre>< code> diff --git a/reference/execution/execution/get_start_scheduler.md b/reference/execution/execution/get_start_scheduler.md
874- index b81c1dc87..f184e0d49 100644
875- --- a/reference/execution/execution/get_start_scheduler.md
876- +++ b/reference/execution/execution/get_start_scheduler.md
877- @@ -51,5 +51,4 @@ const修飾[クエリ可能オブジェクト](../queryable.md)`cenv`に対し
878-
879-
880- ## 参照
881- -- [P2300R10 `std::execution`](https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2024/p2300r10.html)
882- -- [P3826R5 Fix Sender Algorithm Customization](https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2026/p3826r5.html)
883- +- [P3941R4 Scheduler Affinity](https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2026/p3941r4.html)
884- < /code>< /pre> </summary >
885-
886- <author >
887- <name >yoh</name >
888- <email >kawasaki.liamg@gmail.com</email >
889- </author >
890- </entry >
891-
8921053</feed >
0 commit comments