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" >< pre>< code> 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+ < /code>< /pre> </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" >< pre>< code> 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& lt;int& gt;`では`void*`、`atomic_ref& lt;const int& gt;`では`const void*`を返す。
722- +
723- ### この関数を必要とする状況
724- #### データ構造の要素へのアトミックアクセス
725- 配列の各要素にアトミックアクセスする際、[`std::atomic`](/reference/atomic/atomic.md)オブジェクトでは以下のように記述する。
726- @@ -29,7 +32,7 @@ int fetch_add_idx(std::atomic& lt;int& gt;* base, size_t i, int value) {
727-
728- ```cpp
729- int fetch_add_idx(std::atomic_ref& lt;int& gt; base, size_t i, int value) {
730- - int* p = base.address();
731- + int* p = static_cast& lt;int*& 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& lt;int& gt; base, size_t i, int value) {
736- ```cpp
737- void thread(atomic_ref& lt;int& gt;* data, atomic_ref& lt;int& gt; counter, int nthreads) {
738- data-& gt;fetch_add(42, memory_order_relaxed);
739- - int* d = data-& gt;address(); // dataへの生ポインタを取得
740- + int* d = static_cast& lt;int*& gt;(data-& gt;address()); // dataへの生ポインタを取得
741- data-& 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& lt;int& gt;* data, atomic_ref& lt;int& 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 & lt;iostream& gt;
772- @@ -69,8 +85,8 @@ void thread(atomic_ref& lt;int& gt;* data, atomic_ref& lt;int& gt; counter, int nthreads) {
773- #include & lt;thread& gt;
774-
775- void f(std::atomic_ref& lt;int& gt; ar, int i) {
776- - int* p = ar.address();
777- - std::atomic_ref{p + i}.fetch_add(1);
778- + int* p = static_cast& lt;int*& 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` & #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- < /code>< /pre> </summary >
790-
791- <author >
792- <name >Akira Takahashi</name >
793- <email >faithandbrave@gmail.com</email >
794- </author >
795- </entry >
796-
797741</feed >
0 commit comments