Skip to content

Commit e571ad3

Browse files
author
cpprefjp-autoupdate
committed
update automatically
1 parent ddbca7f commit e571ad3

3 files changed

Lines changed: 55 additions & 105 deletions

File tree

reference/execution/execution/transform_sender.html

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -200,8 +200,8 @@
200200

201201
<p class="text-right"><small>
202202
最終更新日時(UTC):
203-
<span itemprop="datePublished" content="2026-05-16T15:17:02">
204-
2026年05月16日 15時17分02秒
203+
<span itemprop="datePublished" content="2026-06-12T07:31:19">
204+
2026年06月12日 07時31分19秒
205205
</span>
206206
<br/>
207207
<span itemprop="author" itemscope itemtype="http://schema.org/Person">
@@ -234,7 +234,13 @@
234234
</p>
235235
<h2>概要</h2>
236236
<p><a href="default_domain.html">実行ドメイン</a>に応じて<a href="sender.html">Sender</a>を変換する。
237-
Senderと<a href="receiver.html">Receiver</a><a href="connect.html">接続(connect)</a>時のカスタマイゼーションポイントとして機能する。</p>
237+
Senderと<a href="receiver.html">Receiver</a>との<a href="connect.html">接続(connect)</a>時のカスタマイゼーションポイントとして機能する。</p>
238+
<p>下記手順によってSender変換が行われる。</p>
239+
<ul>
240+
<li>Receiverの環境<code>evn</code><a href="get_domain.html">開始ドメイン</a>を、Sender<code>sndr</code><a href="get_completion_domain.html">完了ドメイン</a>をそれぞれ問い合わせる。</li>
241+
<li>開始ドメインの上で、恒等変化となるまで(Sender型が変化しなくなるまで)再起的にSender変換を適用する。</li>
242+
<li>完了ドメインの上で再起的にSender変換を適用する。同過程でSender型が変化したときは完了ドメインを再度問い合わせる。</li>
243+
</ul>
238244
<h2><a class="cpprefjp-defined-word" data-desc="関数呼び出し式の評価結果となるオブジェクト・値">戻り値</a></h2>
239245
<p><code>s</code>に対して、<code>start-domain</code><code>D()</code>とする。ここで<code>D</code><a class="cpprefjp-defined-word" data-desc="プログラムが文法規則・診断対象の意味規則・単一定義規則を満たすこと" href="../../../implementation-compliance.html#dfn-well-formed">適格</a>であるならば式<code><a href="get_domain.html">get_domain</a>(env)</code>のdecay型、そうでなければ<code><a href="default_domain.html">default_domain</a></code>とする。</p>
240246
<p>また<code>completion-domain(s)</code><code>D()</code>とする。ここで<code>D</code><a class="cpprefjp-defined-word" data-desc="プログラムが文法規則・診断対象の意味規則・単一定義規則を満たすこと" href="../../../implementation-compliance.html#dfn-well-formed">適格</a>であるならば式<code><a href="get_completion_domain.html">get_completion_domain&lt;&gt;</a>(<a href="get_env.html">get_env</a>(s), env)</code>のdecay型、そうでなければ<code><a href="default_domain.html">default_domain</a></code>とする。</p>
@@ -245,7 +251,7 @@ <h2><a class="cpprefjp-defined-word" data-desc="関数呼び出し式の評価
245251
</ul>
246252
<p>説明用の式<code>transform-recurse(dom, tag, s)</code>を次の通りとする。</p>
247253
<ul>
248-
<li><code>transformed-sndr(dom, tag, s)</code><code>s</code>の型が<a class="cpprefjp-defined-word" data-desc="型をconstおよび・もしくはvolatileで修飾すること">CV修飾</a>を無視して同一ならば、式<code>transformed-recurse(dom, tag, s)</code></li>
254+
<li><code>transformed-sndr(dom, tag, s)</code><code>s</code>の型が<a class="cpprefjp-defined-word" data-desc="型をconstおよび・もしくはvolatileで修飾すること">CV修飾</a>を無視して同一ならば、式<code>transformed-sndr(dom, tag, s)</code></li>
249255
<li>そうではなく<code>tag</code><code><a href="start.html">start</a></code>のとき、<code>s2</code><code>transformed-sndr(dom, tag, s)</code><code>dom2</code><code>start-domain</code>として式<code>transform-recurse(dom2, tag, s2)</code></li>
250256
<li>そうでなければ、式<code>completion-domain(s2)</code></li>
251257
</ul>

rss.xml

Lines changed: 44 additions & 100 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,52 @@
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-11T17:54:44.451936</updated>
6-
<id>e15c5ab9-f20b-47cf-be8e-85186322e0c4</id>
5+
<updated>2026-06-12T07:37:11.389608</updated>
6+
<id>e755c726-5478-4caa-b746-e56fd5d0e250</id>
77

88

9+
<entry>
10+
<title>transform_sender -- execution/transform_sender: 動作概略を追記</title>
11+
<link href="https://cpprefjp.github.io/reference/execution/execution/transform_sender.html"/>
12+
<id>b96428b1bcc313f140d88b3590726fa296cd057d:reference/execution/execution/transform_sender.md</id>
13+
<updated>2026-06-12T16:31:19+09:00</updated>
14+
15+
<summary type="html">&lt;pre&gt;&lt;code&gt;diff --git a/reference/execution/execution/transform_sender.md b/reference/execution/execution/transform_sender.md
16+
index dfc416f6b..1618d0c6a 100644
17+
--- a/reference/execution/execution/transform_sender.md
18+
+++ b/reference/execution/execution/transform_sender.md
19+
@@ -16,7 +16,13 @@ namespace std::execution {
20+
21+
## 概要
22+
[実行ドメイン](default_domain.md)に応じて[Sender](sender.md)を変換する。
23+
-Senderと[Receiver](receiver.md)間[接続(connect)](connect.md)時のカスタマイゼーションポイントとして機能する。
24+
+Senderと[Receiver](receiver.md)との[接続(connect)](connect.md)時のカスタマイゼーションポイントとして機能する。
25+
+
26+
+下記手順によってSender変換が行われる。
27+
+
28+
+- Receiverの環境`evn`に[開始ドメイン](get_domain.md)を、Sender`sndr`に[完了ドメイン](get_completion_domain.md)をそれぞれ問い合わせる。
29+
+- 開始ドメインの上で、恒等変化となるまで(Sender型が変化しなくなるまで)再起的にSender変換を適用する。
30+
+- 完了ドメインの上で再起的にSender変換を適用する。同過程でSender型が変化したときは完了ドメインを再度問い合わせる。
31+
32+
33+
## 戻り値
34+
@@ -31,7 +37,7 @@ Senderと[Receiver](receiver.md)間[接続(connect)](connect.md)時のカスタ
35+
36+
説明用の式`transform-recurse(dom, tag, s)`を次の通りとする。
37+
38+
-- `transformed-sndr(dom, tag, s)`と`s`の型がCV修飾を無視して同一ならば、式`transformed-recurse(dom, tag, s)`
39+
+- `transformed-sndr(dom, tag, s)`と`s`の型がCV修飾を無視して同一ならば、式`transformed-sndr(dom, tag, s)`
40+
- そうではなく`tag`が[`start`](start.md)のとき、`s2`を`transformed-sndr(dom, tag, s)`、`dom2`を`start-domain`として式`transform-recurse(dom2, tag, s2)`
41+
- そうでなければ、式`completion-domain(s2)`
42+
43+
&lt;/code&gt;&lt;/pre&gt;</summary>
44+
45+
<author>
46+
<name>yoh</name>
47+
<email>kawasaki.liamg@gmail.com</email>
48+
</author>
49+
</entry>
50+
951
<entry>
1052
<title>reference -- vector / bitset : C++26でのswap関係の仕様変更に対応 (close #1571)</title>
1153
<link href="https://cpprefjp.github.io/reference/bitset/bitset/reference.html"/>
@@ -696,102 +738,4 @@ index f1fa0312a..1f00dc925 100644
696738
</author>
697739
</entry>
698740

699-
<entry>
700-
<title>address -- atomic_ref::address : C++26で戻り値型が`void*`に変更になった (close #1631)</title>
701-
<link href="https://cpprefjp.github.io/reference/atomic/atomic_ref/address.html"/>
702-
<id>4a8f1a40317bb219e8a3aa594955cbef679b762d:reference/atomic/atomic_ref/address.md</id>
703-
<updated>2026-06-09T12:37:47+09:00</updated>
704-
705-
<summary type="html">&lt;pre&gt;&lt;code&gt;diff --git a/reference/atomic/atomic_ref/address.md b/reference/atomic/atomic_ref/address.md
706-
index dad2c19b6..9b89555bf 100644
707-
--- a/reference/atomic/atomic_ref/address.md
708-
+++ b/reference/atomic/atomic_ref/address.md
709-
@@ -6,12 +6,15 @@
710-
* cpp26[meta cpp]
711-
712-
```cpp
713-
-constexpr T* address() const noexcept;
714-
+constexpr address-return-type address() const noexcept;
715-
```
716-
+* address-return-type[italic]
717-
718-
## 概要
719-
参照しているオブジェクトのアドレスを取得する。
720-
721-
+戻り値型`address-return-type`は説明専用の型エイリアスであり、`COPYCV(T, void)*`と定義される。`COPYCV(T, void)`は、`T`の最上位のCV修飾を`void`に付加した型である。たとえば`atomic_ref&amp;lt;int&amp;gt;`では`void*`、`atomic_ref&amp;lt;const int&amp;gt;`では`const void*`を返す。
722-
+
723-
### この関数を必要とする状況
724-
#### データ構造の要素へのアトミックアクセス
725-
配列の各要素にアトミックアクセスする際、[`std::atomic`](/reference/atomic/atomic.md)オブジェクトでは以下のように記述する。
726-
@@ -29,7 +32,7 @@ int fetch_add_idx(std::atomic&amp;lt;int&amp;gt;* base, size_t i, int value) {
727-
728-
```cpp
729-
int fetch_add_idx(std::atomic_ref&amp;lt;int&amp;gt; base, size_t i, int value) {
730-
- int* p = base.address();
731-
+ int* p = static_cast&amp;lt;int*&amp;gt;(base.address());
732-
return std::atomic_ref{*(p+i)}.fetch_add(value);
733-
}
734-
```
735-
@@ -41,7 +44,7 @@ int fetch_add_idx(std::atomic_ref&amp;lt;int&amp;gt; base, size_t i, int value) {
736-
```cpp
737-
void thread(atomic_ref&amp;lt;int&amp;gt;* data, atomic_ref&amp;lt;int&amp;gt; counter, int nthreads) {
738-
data-&amp;gt;fetch_add(42, memory_order_relaxed);
739-
- int* d = data-&amp;gt;address(); // dataへの生ポインタを取得
740-
+ int* d = static_cast&amp;lt;int*&amp;gt;(data-&amp;gt;address()); // dataへの生ポインタを取得
741-
data-&amp;gt;~atomic_ref(); // このスレッドのデータへのatomic_refを破棄する
742-
int pos = counter.fetch_add(1); // データの破棄が完了したことを伝える
743-
if (pos != (nthreads - 1))
744-
@@ -55,13 +58,26 @@ void thread(atomic_ref&amp;lt;int&amp;gt;* data, atomic_ref&amp;lt;int&amp;gt; counter, int nthreads) {
745-
746-
747-
## 戻り値
748-
-`*this`が参照するオブジェクトをアドレス値を返す
749-
+`*this`が参照するオブジェクトを指すポインタを、`T`のCV修飾を引き継いだ`void`へのポインタとして返す
750-
751-
752-
## 例外
753-
投げない
754-
755-
756-
+## 備考
757-
+- 戻り値を`void`へのポインタとしているのは、参照先オブジェクトへの不用意なアクセスという誤用を防ぐためである
758-
+ - この関数の主な用途は、ポインタ値そのもの(ハッシュ化や比較、配列のインデックス計算など)を使うことである。一方、参照先のオブジェクトを直接読み書きすると、同じオブジェクトを参照するほかの`atomic_ref`が生存している状況ではデータ競合となる
759-
+ - 仮に戻り値が`T*`であれば、以下のように参照先を何気なく読み書きでき、アトミック性を壊すアクセスに気付きにくいという問題が起きる:
760-
+ ```cpp
761-
+ int x = 0;
762-
+ std::atomic_ref ar{x};
763-
+
764-
+ int* p = ar.address(); // 戻り値型がT*であった場合、
765-
+ int value = *p; // 非アトミックな間接参照が容易にできてしまう
766-
+ ```
767-
+
768-
+
769-
## 例
770-
```cpp example
771-
#include &amp;lt;iostream&amp;gt;
772-
@@ -69,8 +85,8 @@ void thread(atomic_ref&amp;lt;int&amp;gt;* data, atomic_ref&amp;lt;int&amp;gt; counter, int nthreads) {
773-
#include &amp;lt;thread&amp;gt;
774-
775-
void f(std::atomic_ref&amp;lt;int&amp;gt; ar, int i) {
776-
- int* p = ar.address();
777-
- std::atomic_ref{p + i}.fetch_add(1);
778-
+ int* p = static_cast&amp;lt;int*&amp;gt;(ar.address());
779-
+ std::atomic_ref{*(p + i)}.fetch_add(1);
780-
}
781-
782-
int main()
783-
@@ -109,3 +125,5 @@ int main()
784-
785-
## 参照
786-
- [P2835R7 Expose `std::atomic_ref` &amp;#39;s object address](https://open-std.org/jtc1/sc22/wg21/docs/papers/2024/p2835r7.html)
787-
+- [P3936R1 Safer `atomic_ref::address` (FR-030-310)](https://open-std.org/jtc1/sc22/wg21/docs/papers/2026/p3936r1.pdf)
788-
+ - C++26で、誤用を防ぐために戻り値型を`T*`から`COPYCV(T, void)*`(`T`のCV修飾を引き継いだ`void`へのポインタ)に変更した
789-
&lt;/code&gt;&lt;/pre&gt;</summary>
790-
791-
<author>
792-
<name>Akira Takahashi</name>
793-
<email>faithandbrave@gmail.com</email>
794-
</author>
795-
</entry>
796-
797741
</feed>

sitemap.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28710,7 +28710,7 @@
2871028710

2871128711
<url>
2871228712
<loc>https://cpprefjp.github.io/reference/execution/execution/transform_sender.html</loc>
28713-
<lastmod>2026-06-06T22:10:52+09:00</lastmod>
28713+
<lastmod>2026-06-12T16:31:19+09:00</lastmod>
2871428714
<changefreq>daily</changefreq>
2871528715
<priority>0.6</priority>
2871628716
</url>

0 commit comments

Comments
 (0)