From b6c55ca1210b201f62914325b8609466a1d53534 Mon Sep 17 00:00:00 2001 From: Akira Takahashi Date: Thu, 27 Aug 2026 15:05:49 +0900 Subject: [PATCH 01/16] =?UTF-8?q?to=5Fstring,=20to=5Fwstring,=20apply=20:?= =?UTF-8?q?=20=E6=A9=9F=E8=83=BD=E3=83=86=E3=82=B9=E3=83=88=E3=83=9E?= =?UTF-8?q?=E3=82=AF=E3=83=AD=E3=81=8C=E6=9B=B4=E6=96=B0=E3=81=95=E3=82=8C?= =?UTF-8?q?=E3=81=A6=E3=81=AA=E3=81=8B=E3=81=A3=E3=81=9F=E3=81=AE=E3=81=A7?= =?UTF-8?q?C++29=E3=81=A7=E4=BF=AE=E6=AD=A3=E3=81=95=E3=82=8C=E3=80=81C++2?= =?UTF-8?q?6=E3=81=AB=E9=81=A1=E5=8F=8A=E9=81=A9=E7=94=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lang/cpp26/feature_test_macros.md | 7 ++++++- reference/string/to_string.md | 2 ++ reference/string/to_wstring.md | 2 ++ reference/tuple/apply.md | 2 ++ 4 files changed, 12 insertions(+), 1 deletion(-) diff --git a/lang/cpp26/feature_test_macros.md b/lang/cpp26/feature_test_macros.md index 0990999dd7..e02c761f32 100755 --- a/lang/cpp26/feature_test_macros.md +++ b/lang/cpp26/feature_test_macros.md @@ -42,7 +42,7 @@ |`__cpp_lib_algorithm_default_value_type`|`202603L`|一部アルゴリズムに、値を波カッコ初期化で渡せるよう制約を追加 (P3787R2で[`uninitialized_fill`](/reference/memory/uninitialized_fill.md)/[`uninitialized_fill_n`](/reference/memory/uninitialized_fill_n.md)を追加)|[``](/reference/algorithm.md), [``](/reference/ranges.md), [``](/reference/string.md), [``](/reference/deque.md), [``](/reference/list.md), [``](/reference/forward_list.md), [``](/reference/vector.md), [``](/reference/memory.md)| |`__cpp_lib_aligned_accessor`|`202411L`|[``](/reference/mdspan.md)に、要素アクセスにアライメント保証を与える[`std::aligned_accessor`](/reference/mdspan/aligned_accessor.md)を追加|[``](/reference/mdspan.md)| |`__cpp_lib_associative_heterogeneous_insertion`|`202306L`|連想コンテナの一部メンバ関数に、一時オブジェクト生成のコストを抑える拡張を追加|[``](/reference/map.md), [``](/reference/set.md), [``](/reference/unordered_map.md), [``](/reference/unordered_set.md)| -|`__cpp_lib_apply`|`202506L`| [`std::apply`](/reference/tuple/apply.md)の戻り値型推論をやめて、戻り値型用の[`std::apply_result`](/reference/tuple/apply_result.md.nolink)クラスを追加|[``](/reference/tuple.md), [``](/reference/type_traits.md)| +|`__cpp_lib_apply`|`202603L`| [`std::apply`](/reference/tuple/apply.md)の戻り値型推論をやめて、戻り値型用の[`std::apply_result`](/reference/tuple/apply_result.md.nolink)クラスを追加 (`202506L`)。[``](/reference/meta.md)にも対応する[`std::meta::apply_result`](/reference/meta/apply_result.md)などを追加 (`202603L`)|[``](/reference/tuple.md), [``](/reference/type_traits.md), [``](/reference/meta.md)| |`__cpp_lib_atomic_min_max`|`202506L`|[`std::atomic`](/reference/atomic/atomic.md)オブジェクトに対する2つの値の最大値・最小値を取得する関数を追加|[``](/reference/atomic.md)| |`__cpp_lib_atomic_reductions`|`202506L`|[`std::atomic`](/reference/atomic/atomic.md)と[`std::atomic_ref`](/reference/atomic/atomic_ref.md)に高速な縮約用の操作を追加|[``](/reference/atomic.md)| |`__cpp_lib_atomic_ref`|`202411L`|[`std::atomic_ref`](/reference/atomic/atomic_ref.md)に[`address()`](/reference/atomic/atomic_ref/address.md)メンバ関数を追加|[``](/reference/atomic.md)| @@ -68,6 +68,7 @@ |`__cpp_lib_constexpr_queue`|`202502L`|[`std::queue`](/reference/queue/queue.md) / [`std::priority_queue`](/reference/queue/priority_queue.md)を`constexpr`対応|[``](/reference/queue.md)| |`__cpp_lib_constexpr_set`|`202502L`|[`std::set`](/reference/set/set.md) / [`std::multiset`](/reference/set/multiset.md)を`constexpr`対応|[``](/reference/set.md)| |`__cpp_lib_constexpr_stack`|`202502L`|[`std::stack`](/reference/stack/stack.md)を`constexpr`対応|[``](/reference/stack.md)| +|`__cpp_lib_constexpr_string`|`202511L`|[`std::to_string()`](/reference/string/to_string.md)・[`std::to_wstring()`](/reference/string/to_wstring.md)の整数版が`constexpr`対応|[``](/reference/string.md)| |`__cpp_lib_constexpr_unordered_map`|`202502L`|[`std::unordered_map`](/reference/unordered_map/unordered_map.md) / [`std::unordered_multimap`](/reference/unordered_map/unordered_multimap.md)を`constexpr`対応|[``](/reference/unordered_map.md)| |`__cpp_lib_constexpr_unordered_set`|`202502L`|[`std::unordered_set`](/reference/unordered_set/unordered_set.md) / [`std::unordered_multiset`](/reference/unordered_set/unordered_multiset.md)を`constexpr`対応|[``](/reference/unordered_set.md)| |`__cpp_lib_constrained_equality`|`202411L`|[`std::reference_wrapper`](/reference/functional/reference_wrapper.md)に、比較演算子[`==`](/reference/functional/reference_wrapper/op_equal.md)と[`<=>`](/reference/functional/reference_wrapper/op_compare_3way.md)を追加|[``](/reference/utility.md), [``](/reference/tuple.md), [``](/reference/optional.md), [``](/reference/variant.md), [``](/reference/expected.md)| @@ -195,6 +196,10 @@ - [SD-FeatureTest: Feature-Test Macros and Policies - isocpp](https://isocpp.org/std/standing-documents/sd-6-sg10-feature-test-recommendations) - [LWG Issue 4286. Some more feature-test macros for fully freestanding features are not marked freestanding](https://cplusplus.github.io/LWG/issue4286) - C++26で、`__cpp_lib_aligned_accessor`・`__cpp_lib_array_constexpr`・`__cpp_lib_clamp`・`__cpp_lib_constexpr_numeric`・`__cpp_lib_function_ref`・`__cpp_lib_gcd_lcm`・`__cpp_lib_integer_comparison_functions`・`__cpp_lib_is_sufficiently_aligned`・`__cpp_lib_ranges_contains`・`__cpp_lib_ranges_enumerate`・`__cpp_lib_ranges_find_last`・`__cpp_lib_ranges_fold`・`__cpp_lib_ranges_iota`・`__cpp_lib_ranges_starts_ends_with`・`__cpp_lib_robust_nonmodifying_seq_ops`・`__cpp_lib_sample`・`__cpp_lib_saturation_arithmetic`が、フリースタンディング機能に対応するマクロとしてマークされた(あわせて``の`is_sufficiently_aligned`もフリースタンディング指定された) +- [LWG Issue 4531. Should there be a feature-test macro update for constexpr `std::to_(w)string`?](https://cplusplus.github.io/LWG/issue4531) + - [`std::to_string()`](/reference/string/to_string.md)の`constexpr`対応がどの機能テストマクロにも反映されていなかったため、`__cpp_lib_constexpr_string`が`202511L`に更新された。このIssueは規格としてはC++29のワーキングドラフトへ適用されたが、C++26で追加された機能に対する修正であるため、C++26へ遡及して適用される +- [LWG Issue 4567. Feature test macro value for `apply_result`, `is_applicable`](https://cplusplus.github.io/LWG/issue4567) + - `__cpp_lib_apply`の値が整理され、[P1317R2](https://wg21.link/P1317R2)に対応した場合は`202506L`、[P3795R2](https://wg21.link/P3795R2)による[``](/reference/meta.md)側の対応も行った場合は`202603L`となった。このIssueは規格としてはC++29のワーキングドラフトへ適用されたが、いずれもC++26で追加された機能に対する修正であるため、C++26へ遡及して適用される - [LWG Issue 4550. Need new feature test macros for `` and ``](https://cplusplus.github.io/LWG/issue4550) - C++26で、`__cpp_lib_stdbit_h`と`__cpp_lib_stdckdint_h`が追加された - [P3371R5 Fix C++26 BLAS rank updates consistency](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3371r5.html) diff --git a/reference/string/to_string.md b/reference/string/to_string.md index 883e2a7380..2a76d7c36f 100644 --- a/reference/string/to_string.md +++ b/reference/string/to_string.md @@ -207,3 +207,5 @@ std::string to_string(long double val) - C++26から整数バージョンが`constexpr`に対応した - [LWG Issue 1261. Insufficent overloads for `to_string` / `to_wstring`](https://cplusplus.github.io/LWG/issue1261) - C++11で、`int`/`unsigned`/`long`/`unsigned long`/`float`/`double`を受け取るオーバーロードが追加された。より大きな型のオーバーロードしかないと、変換が曖昧になったり意図しない拡張が起きたりするため +- [LWG Issue 4531. Should there be a feature-test macro update for constexpr `std::to_(w)string`?](https://cplusplus.github.io/LWG/issue4531) + - この関数の`constexpr`対応を反映するために`__cpp_lib_constexpr_string`が`202511L`に更新された。このIssueは規格としてはC++29のワーキングドラフトへ適用されたが、C++26で追加された機能に対する修正であるため、C++26へ遡及して適用される diff --git a/reference/string/to_wstring.md b/reference/string/to_wstring.md index ac0d824aac..c26fc8ced8 100644 --- a/reference/string/to_wstring.md +++ b/reference/string/to_wstring.md @@ -216,3 +216,5 @@ std::wstring to_wstring(long double val) - C++26から整数バージョンが`constexpr`に対応した - [LWG Issue 1261. Insufficent overloads for `to_string` / `to_wstring`](https://cplusplus.github.io/LWG/issue1261) - C++11で、`int`/`unsigned`/`long`/`unsigned long`/`float`/`double`を受け取るオーバーロードが追加された。より大きな型のオーバーロードしかないと、変換が曖昧になったり意図しない拡張が起きたりするため +- [LWG Issue 4531. Should there be a feature-test macro update for constexpr `std::to_(w)string`?](https://cplusplus.github.io/LWG/issue4531) + - この関数の`constexpr`対応を反映するために`__cpp_lib_constexpr_string`が`202511L`に更新された。このIssueは規格としてはC++29のワーキングドラフトへ適用されたが、C++26で追加された機能に対する修正であるため、C++26へ遡及して適用される diff --git a/reference/tuple/apply.md b/reference/tuple/apply.md index 8e78c550e3..05016e9dc0 100644 --- a/reference/tuple/apply.md +++ b/reference/tuple/apply.md @@ -145,3 +145,5 @@ hello - C++23から条件付きで`noexcept`例外指定が行われる。 - [P1317R2 Remove return type deduction in `std::apply`](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p1317r2.pdf) - C++26から戻り値型が`decltype(auto)`から`apply_result_t`に変更され、SFINAEフレンドリーになった。 +- [LWG Issue 4567. Feature test macro value for `apply_result`, `is_applicable`](https://cplusplus.github.io/LWG/issue4567) + - `__cpp_lib_apply`の値が整理され、[``](/reference/meta.md)側の対応も含む場合は`202603L`となることが規定された。このIssueは規格としてはC++29のワーキングドラフトへ適用されたが、C++26で追加された機能に対する修正であるため、C++26へ遡及して適用される From 8831ad164d168afd4a43b351ce75d9f57e45aa6b Mon Sep 17 00:00:00 2001 From: Akira Takahashi Date: Thu, 27 Aug 2026 15:28:30 +0900 Subject: [PATCH 02/16] =?UTF-8?q?atomic::notify=20/=20wait=E7=B3=BB=20:=20?= =?UTF-8?q?LWG=20Issue=E3=82=92=E8=BF=BD=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- reference/atomic/atomic/notify_all.md | 2 ++ reference/atomic/atomic/notify_one.md | 2 ++ reference/atomic/atomic/wait.md | 2 ++ 3 files changed, 6 insertions(+) diff --git a/reference/atomic/atomic/notify_all.md b/reference/atomic/atomic/notify_all.md index 53841c4106..fdd29c5191 100644 --- a/reference/atomic/atomic/notify_all.md +++ b/reference/atomic/atomic/notify_all.md @@ -95,3 +95,5 @@ int main() - C++20での、`volatile`版への制約追加 - [P3309R3 `constexpr atomic` and `atomic_ref`](https://open-std.org/jtc1/sc22/wg21/docs/papers/2024/p3309r3.html) - C++26で`constexpr`に対応した +- [LWG Issue 3417. Missing `volatile` atomic deprecations](https://cplusplus.github.io/LWG/issue3417) + - `volatile`修飾されたオーバーロードが`is_always_lock_free`が`true`である場合にのみオーバーロード解決に参加することが規定された。この制約はほかの`volatile`版メンバ関数には当初からあったが、この関数には記載が漏れていた。規格としてはC++29のワーキングドラフトへ適用されたが、記載漏れの修正であるため、この関数が追加されたC++20へ遡及して適用される diff --git a/reference/atomic/atomic/notify_one.md b/reference/atomic/atomic/notify_one.md index 70f306111f..12a0555f22 100644 --- a/reference/atomic/atomic/notify_one.md +++ b/reference/atomic/atomic/notify_one.md @@ -121,3 +121,5 @@ int main() - C++20での、`volatile`版への制約追加 - [P3309R3 `constexpr atomic` and `atomic_ref`](https://open-std.org/jtc1/sc22/wg21/docs/papers/2024/p3309r3.html) - C++26で`constexpr`に対応した +- [LWG Issue 3417. Missing `volatile` atomic deprecations](https://cplusplus.github.io/LWG/issue3417) + - `volatile`修飾されたオーバーロードが`is_always_lock_free`が`true`である場合にのみオーバーロード解決に参加することが規定された。この制約はほかの`volatile`版メンバ関数には当初からあったが、この関数には記載が漏れていた。規格としてはC++29のワーキングドラフトへ適用されたが、記載漏れの修正であるため、この関数が追加されたC++20へ遡及して適用される diff --git a/reference/atomic/atomic/wait.md b/reference/atomic/atomic/wait.md index 32b7f4d0dc..2d31bd5b56 100644 --- a/reference/atomic/atomic/wait.md +++ b/reference/atomic/atomic/wait.md @@ -148,3 +148,5 @@ int main() - C++20での、`volatile`版への制約追加 - [P3309R3 `constexpr atomic` and `atomic_ref`](https://open-std.org/jtc1/sc22/wg21/docs/papers/2024/p3309r3.html) - C++26で`constexpr`に対応した +- [LWG Issue 3417. Missing `volatile` atomic deprecations](https://cplusplus.github.io/LWG/issue3417) + - `volatile`修飾されたオーバーロードが`is_always_lock_free`が`true`である場合にのみオーバーロード解決に参加することが規定された。この制約はほかの`volatile`版メンバ関数には当初からあったが、この関数には記載が漏れていた。規格としてはC++29のワーキングドラフトへ適用されたが、記載漏れの修正であるため、この関数が追加されたC++20へ遡及して適用される From 21c1cdef7c364f13f7350d93d3b5dc137e121e60 Mon Sep 17 00:00:00 2001 From: Akira Takahashi Date: Thu, 27 Aug 2026 15:31:00 +0900 Subject: [PATCH 03/16] =?UTF-8?q?is=5Fclock=20:=20C1::is=5Fsteady=E3=81=8C?= =?UTF-8?q?=E5=AE=9A=E6=95=B0=E5=BC=8F=E3=81=A7=E4=BD=BF=E7=94=A8=E3=81=A7?= =?UTF-8?q?=E3=81=8D=E3=82=8B=E3=81=93=E3=81=A8=E3=81=8C=E8=A6=81=E4=BB=B6?= =?UTF-8?q?=E3=81=AB=E8=BF=BD=E5=8A=A0=E3=81=95=E3=82=8C=E3=81=9F=E3=80=82?= =?UTF-8?q?=E6=9C=AA=E8=A6=8F=E5=AE=9A=E3=81=A0=E3=81=A3=E3=81=9F=E3=81=AE?= =?UTF-8?q?=E3=82=82=E3=81=AE=E6=98=8E=E7=A2=BA=E5=8C=96=E3=81=AA=E3=81=AE?= =?UTF-8?q?=E3=81=A7=E9=81=A1=E5=8F=8A=E9=81=A9=E7=94=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- reference/chrono/is_clock.md | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/reference/chrono/is_clock.md b/reference/chrono/is_clock.md index 4d08cabac2..12cd2ce41d 100644 --- a/reference/chrono/is_clock.md +++ b/reference/chrono/is_clock.md @@ -27,7 +27,7 @@ Clock要件を満たすには、以下が必要である: | `C1::period` | [`std::ratio`](/reference/ratio/ratio.md)の特殊化 | クロックの時間周期 (秒ベース) | | `C1::duration` | [`chrono::duration`](duration.md)`` | クロックの`duation`型 | | `C1::time_point` | [`chrono::time_point`](time_point.md)``もしくは[`chrono::time_point`](time_point.md)`` | クロックの`time_point`型。`C1`と`C2`は同じエポックを参照する | -| `C1::is_steady` | `const bool` | `t1 <= t2`が常に真であり (注:時間が戻らない)、時間間隔が常に一定である場合に`true`、そうでなければ`false` | +| `C1::is_steady` | `const bool` | `t1 <= t2`が常に真であり (注:時間が戻らない)、時間間隔が常に一定である場合に`true`、そうでなければ`false`。定数式で使用できることが要求される | | `C1::now()` | `C1::time_point` | 現在の時間点を表す`time_point`オブジェクトを返す | ここで、以下のように定義する: @@ -82,3 +82,8 @@ int main() - [Clang](/implementation.md#clang): 9.0 [mark noimpl] - [GCC](/implementation.md#gcc): 9.2 [mark noimpl] - [Visual C++](/implementation.md#visual_cpp): 2019 Update 3 [mark noimpl] + + +## 参照 +- [LWG Issue 4487. Is member `is_steady` of a Cpp17Clock type required to be usable in constant expressions?](https://cplusplus.github.io/LWG/issue4487) + - `C1::is_steady`が定数式で使用できることが要件に追加された。それ以前は`const bool`とだけ規定されており、利用者定義のクロックに対して同じ要求があるかが不明確だった。規格としてはC++29のワーキングドラフトへ適用されたが、未規定だった点の明文化であるため、Cpp17Clock要件が規定されたC++11へ遡及して適用される From 6b8c6e9bd2745d1bbed0d659c1dcee5315d45207 Mon Sep 17 00:00:00 2001 From: Akira Takahashi Date: Thu, 27 Aug 2026 15:41:51 +0900 Subject: [PATCH 04/16] =?UTF-8?q?packaged=5Ftask=E3=81=A8promise=E3=81=AE?= =?UTF-8?q?=E4=BB=A3=E5=85=A5=E6=BC=94=E7=AE=97=E5=AD=90=20:=20=E5=85=B1?= =?UTF-8?q?=E6=9C=89=E7=8A=B6=E6=85=8B=E3=81=AE=E6=94=BE=E6=A3=84=E3=81=AB?= =?UTF-8?q?=E3=81=A4=E3=81=84=E3=81=A6C++29=E3=81=A7=E4=BB=95=E6=A7=98?= =?UTF-8?q?=E3=81=AE=E6=9B=B8=E3=81=8D=E6=96=B9=E3=81=8C=E6=95=B4=E7=90=86?= =?UTF-8?q?=E3=81=95=E3=82=8CC++11=E3=81=AB=E9=81=A1=E5=8F=8A=E9=81=A9?= =?UTF-8?q?=E7=94=A8=E3=81=95=E3=82=8C=E3=81=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- reference/future/packaged_task/op_assign.md | 15 ++++++++++----- reference/future/promise/op_assign.md | 13 +++++++++---- 2 files changed, 19 insertions(+), 9 deletions(-) diff --git a/reference/future/packaged_task/op_assign.md b/reference/future/packaged_task/op_assign.md index e58d3cb6b0..24bdd4fcc1 100644 --- a/reference/future/packaged_task/op_assign.md +++ b/reference/future/packaged_task/op_assign.md @@ -18,10 +18,13 @@ packaged_task& operator=(packaged_task&& rhs) noexcept; // (2) ## 効果 -- (2) : - 1. まず現在の共有状態が準備完了状態([`future_status::ready`](../future_status.md))でなければ、error conditionとして[`broken_promise`](../future_errc.md)を持つ[`future_error`](../future_error.md)例外オブジェクトを格納したのち、準備完了状態にする。ただし、実装によっては、この動作が行われない場合がある(備考を参照)。 - 2. 現在の共有状態を解放する。 - 3. `packaged_task(`[`std::move`](/reference/utility/move.md)`(rhs)).swap(*this)`を行う。 +- (2) : `packaged_task(`[`std::move`](/reference/utility/move.md)`(rhs)).swap(*this)`と等価。 + +この結果として、以下が行われる: + +1. `rhs`から一時オブジェクトをムーブ構築する。`rhs`は共有状態とタスクを持たなくなる。 +2. 一時オブジェクトと`*this`を[`swap`](swap.md)する。`*this`は`rhs`が持っていた共有状態とタスクを持ち、一時オブジェクトは`*this`が元々持っていた共有状態を持つ。 +3. 一時オブジェクトの[デストラクタ](op_destructor.md)によって、`*this`が元々持っていた共有状態が放棄される。すなわち、その共有状態が準備完了状態([`future_status::ready`](../future_status.md))でなければ、error conditionとして[`broken_promise`](../future_errc.md)を持つ[`future_error`](../future_error.md)例外オブジェクトを格納したのち準備完了状態にし、そのうえで共有状態を解放する。ただし、実装によっては、この動作が行われない場合がある(備考を参照)。 ## 戻り値 @@ -33,7 +36,7 @@ packaged_task& operator=(packaged_task&& rhs) noexcept; // (2) ## 備考 -C++11の仕様では、ムーブ代入演算子の効果として古い共有状態は「放棄する(abandon)」ではなく「解放する(release)」となっているが、仕様の他の項目(Shared States, Class template promise, および Class template packaged_task内のvoid reset();)の記載との整合性を欠いており、「放棄する(abandon)」とする方が合理性があるため効果の項にはそのように記載した。 +C++11の仕様では、ムーブ代入演算子の効果として古い共有状態は「放棄する(abandon)」ではなく「解放する(release)」となっていたが、仕様の他の項目(Shared States, Class template promise, および Class template packaged_task内のvoid reset();)の記載との整合性を欠いていた。LWG Issue 4158によってこの不整合が解消され、「放棄する(abandon)」が正しいことが確定したため、効果の項にはそのように記載している。 「(共有状態を)放棄する(abandon)」とは効果の項(2)の1と2が行われることをいい、「(共有状態を)解放する(release)」とは効果の項(2)の2のみが行われることである。通常、[`promise`](../promise.md)および`packaged_task`は処理結果を提供する側であるため共有状態を所有しなくなるときには前者を行い、[`future`](../future.md)および[`shared_future`](../shared_future.md)は処理結果を受け取る側であるため共有状態を所有しなくなるときには後者を行う。 @@ -77,3 +80,5 @@ int main() ## 参照 - [LWG Issue 2067. `packaged_task` should have deleted copy c'tor with const parameter](http://www.open-std.org/jtc1/sc22/wg21/docs/lwg-defects.html#2067) +- [LWG Issue 4158. `packaged_task::operator=` should abandon its shared state](https://cplusplus.github.io/LWG/issue4158) + - 効果の記述が`packaged_task(std::move(rhs)).swap(*this)`と等価であるという形へ整理され、共有状態を「解放する(release)」のか「放棄する(abandon)」のかという規格内の不整合が解消された。規格としてはC++29のワーキングドラフトへ適用されたが、矛盾した文言の修正であるためC++11へ遡及して適用される diff --git a/reference/future/promise/op_assign.md b/reference/future/promise/op_assign.md index 35d1935045..f325ce4a62 100644 --- a/reference/future/promise/op_assign.md +++ b/reference/future/promise/op_assign.md @@ -16,10 +16,13 @@ promise& operator=(const promise& rhs) = delete; // (2) ## 効果 -- (1) : - 1. まず現在の共有状態が準備完了状態([`future_status::ready`](../future_status.md))でなければ、error conditionとして[`broken_promise`](../future_errc.md)を持つ[`future_error`](../future_error.md)例外オブジェクトを格納したのち、準備完了状態にする。 - 2. 現在の共有状態を解放する。 - 3. `promise(std::`[`move`](/reference/utility/move.md)`(rhs)).swap(*this)`する。 +- (1) : `promise(std::`[`move`](/reference/utility/move.md)`(rhs)).swap(*this)`と等価。 + +この結果として、以下が行われる: + +1. `rhs`から一時オブジェクトをムーブ構築する。`rhs`は共有状態を持たなくなる。 +2. 一時オブジェクトと`*this`を[`swap`](swap.md)する。`*this`は`rhs`が持っていた共有状態を持ち、一時オブジェクトは`*this`が元々持っていた共有状態を持つ。 +3. 一時オブジェクトの[デストラクタ](op_destructor.md)によって、`*this`が元々持っていた共有状態が放棄される。すなわち、その共有状態が準備完了状態([`future_status::ready`](../future_status.md))でなければ、error conditionとして[`broken_promise`](../future_errc.md)を持つ[`future_error`](../future_error.md)例外オブジェクトを格納したのち準備完了状態にし、そのうえで共有状態を解放する。 ## 戻り値 - (1) : `*this` @@ -55,3 +58,5 @@ int main() ## 参照 +- [LWG Issue 4158. `packaged_task::operator=` should abandon its shared state](https://cplusplus.github.io/LWG/issue4158) + - 効果の記述が`promise(std::move(rhs)).swap(*this)`と等価であるという形へ整理された。一時オブジェクトのデストラクタによって古い共有状態が放棄されるため、動作は変わらない。規格としてはC++29のワーキングドラフトへ適用されたが、記述の整理であるためC++11へ遡及して適用される From cb8f76d1a4bb36ec4b1e6535cb3e915e04013c20 Mon Sep 17 00:00:00 2001 From: Akira Takahashi Date: Thu, 27 Aug 2026 15:42:44 +0900 Subject: [PATCH 05/16] =?UTF-8?q?tuple=E3=81=AE=E3=82=B3=E3=83=B3=E3=82=B9?= =?UTF-8?q?=E3=83=88=E3=83=A9=E3=82=AF=E3=82=BF=20:=20=E3=82=A2=E3=83=AD?= =?UTF-8?q?=E3=82=B1=E3=83=BC=E3=82=BF=E6=A7=8B=E7=AF=89=E3=81=AE=E5=AF=BE?= =?UTF-8?q?=E8=B1=A1=E3=81=8C=E3=80=81=E5=8F=82=E7=85=A7=E5=9E=8B=E3=81=A7?= =?UTF-8?q?=E3=81=AF=E3=81=AA=E3=81=84=E8=A6=81=E7=B4=A0=E3=81=AE=E3=81=BF?= =?UTF-8?q?=E3=81=A7=E3=81=82=E3=82=8B=E3=81=93=E3=81=A8=E3=81=8C=E8=A6=8F?= =?UTF-8?q?=E5=AE=9A=E3=81=95=E3=82=8C=E3=80=81C++29=E3=81=8B=E3=82=89C++1?= =?UTF-8?q?1=E3=81=AB=E9=81=A1=E5=8F=8A=E9=81=A9=E7=94=A8=E3=81=95?= =?UTF-8?q?=E3=82=8C=E3=81=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- reference/tuple/tuple/op_constructor.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/reference/tuple/tuple/op_constructor.md b/reference/tuple/tuple/op_constructor.md index 1f73659807..fb4571931e 100644 --- a/reference/tuple/tuple/op_constructor.md +++ b/reference/tuple/tuple/op_constructor.md @@ -235,6 +235,8 @@ explicit(see below) constexpr 以下 (15)-(28) は (1)-(14) のアロケータ指定版であり、アロケータを指定する事以外は (1)-(14) と等価である。 +アロケータ構築 (uses-allocator construction) の対象となるのは、参照型ではない要素のみである。 + - (15) : アロケータを指定してデフォルト構築する - (16) : アロケータを指定して可変テンプレートパラメータの型の値によってコピー構築する - (17) : アロケータを指定して可変テンプレートパラメータの型の値によってムーブ構築する @@ -469,3 +471,5 @@ int main() - C++23で、空の`tuple<>`のデフォルトコンストラクタがトリビアルであることが規定された - [LWG Issue 4045. `tuple` can create dangling references from `tuple-like`](https://cplusplus.github.io/LWG/issue4045) - C++26で、[`tuple-like`](../tuple-like.md)なオブジェクトから構築するコンストラクタ(14)について、いずれかの要素がダングリング参照を作成する場合に削除定義されることが規定された(C++23での`tuple-like`コンストラクタ導入時に欠けていた保護の追加) +- [LWG Issue 4267. Uses-allocator construction is meaningless for tuple of references](https://cplusplus.github.io/LWG/issue4267) + - アロケータ指定版の各コンストラクタにおいて、アロケータ構築の対象が参照型ではない要素に限られることが明記された。参照型の要素をアロケータ構築の対象とすることに意味がないため。規格としてはC++29のワーキングドラフトへ適用されたが、未規定だった点の明文化であるためC++11へ遡及して適用される From e5dd220a355b65fb8bd918dee645a5039271b158 Mon Sep 17 00:00:00 2001 From: Akira Takahashi Date: Thu, 27 Aug 2026 15:44:17 +0900 Subject: [PATCH 06/16] =?UTF-8?q?NULL=20:=20=E5=B1=95=E9=96=8B=E3=81=95?= =?UTF-8?q?=E3=82=8C=E3=82=8B=E5=80=A4=E3=81=8C=E3=83=AA=E3=83=86=E3=83=A9?= =?UTF-8?q?=E3=83=AB=E3=81=A7=E3=81=82=E3=82=8B=E3=81=93=E3=81=A8=E3=81=8C?= =?UTF-8?q?=E8=A6=8F=E5=AE=9A=E3=81=95=E3=82=8C=E3=80=81=E9=81=A1=E5=8F=8A?= =?UTF-8?q?=E9=81=A9=E7=94=A8=E3=81=95=E3=82=8C=E3=81=9F=E3=80=82=E3=81=93?= =?UTF-8?q?=E3=82=8C=E3=81=AB=E3=82=88=E3=81=A3=E3=81=A6`(void*)0`?= =?UTF-8?q?=E3=81=AF=E8=A8=B1=E5=8F=AF=E3=81=95=E3=82=8C=E3=81=AA=E3=81=8F?= =?UTF-8?q?=E3=81=AA=E3=81=A3=E3=81=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- reference/cstddef/null.md | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/reference/cstddef/null.md b/reference/cstddef/null.md index abe5dc8aae..847a63a369 100644 --- a/reference/cstddef/null.md +++ b/reference/cstddef/null.md @@ -30,12 +30,14 @@ int main() { ``` ## 備考 -C++98において、「ヌルポインタ定数」は「値が0になる整数定数式」と定義されていた。したがって、マクロ`NULL`の値として`0`や`0L`は規格に適合するが、`(void*)0`は整数定数式ではないため適合しない。 - -C++11では、「ヌルポインタ定数」の定義に「[`std::nullptr_t`](/reference/cstddef/nullptr_t.md)型のprvalue」が追加されたため、`nullptr`も規格に適合する。しかし、`NULL`の値の型が変わるとコードの互換性を損なうことから、当面の間`NULL`の値は整数定数式であると思われる。C++11以降は`NULL`ではなく[`nullptr`](/lang/cpp11/nullptr.md)を使用するとよい。 +- マクロ`NULL`が展開されるヌルポインタ定数はリテラルであることが規定されている。したがって`nullptr`、`0`、`0L`は規格に適合するが、`(void*)0`は適合しない。 +- C++98において、「ヌルポインタ定数」は「値が0になる整数定数式」と定義されていた。したがって、マクロ`NULL`の値として`0`や`0L`は規格に適合するが、`(void*)0`は整数定数式ではないため適合しない。 +- C++11では、「ヌルポインタ定数」の定義に「[`std::nullptr_t`](/reference/cstddef/nullptr_t.md)型のprvalue」が追加されたため、`nullptr`も規格に適合する。しかし、`NULL`の値の型が変わるとコードの互換性を損なうことから、当面の間`NULL`の値は整数定数式であると思われる。C++11以降は`NULL`ではなく[`nullptr`](/lang/cpp11/nullptr.md)を使用するとよい。 ## 関連項目 - [C++11 `nullptr`](/lang/cpp11/nullptr.md) ## 参照 - [Does any major C++ implementation actually define `NULL` as `nullptr`? - Stack Overflow](https://stackoverflow.com/questions/61699775/does-any-major-c-implementation-actually-define-null-as-nullptr) +- [LWG Issue 4182. Definition of `NULL` is too broad](https://cplusplus.github.io/LWG/issue4182) + - `NULL`が展開されるヌルポインタ定数はリテラルであることが規定された。それ以前は「処理系定義のヌルポインタ定数」としか規定されておらず、任意の定数式を許すように読めたため。規格としてはC++29のワーキングドラフトへ適用されたが、処理系に対する制約の明文化であり、既存の処理系はいずれも満たしているため、C++98へ遡及して適用される From 77e735f5eb294d18c27d03a75e1ca9830330b8cf Mon Sep 17 00:00:00 2001 From: Akira Takahashi Date: Thu, 27 Aug 2026 15:50:25 +0900 Subject: [PATCH 07/16] =?UTF-8?q?as=5Fawaitable=20:=20p=E3=81=8C=E5=B7=A6?= =?UTF-8?q?=E8=BE=BA=E5=80=A4=E3=81=A7=E3=81=AA=E3=81=84=E5=A0=B4=E5=90=88?= =?UTF-8?q?=E3=81=AF=E4=B8=8D=E9=81=A9=E6=A0=BC=E3=81=AB=E3=81=AA=E3=81=A3?= =?UTF-8?q?=E3=81=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- reference/execution/execution/as_awaitable.md | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/reference/execution/execution/as_awaitable.md b/reference/execution/execution/as_awaitable.md index ec13e819f4..a361069473 100644 --- a/reference/execution/execution/as_awaitable.md +++ b/reference/execution/execution/as_awaitable.md @@ -30,9 +30,11 @@ Promise型`p`をもつコルーチンにおいて、Await式`co_await as_awaitab ## 効果 -説明用の式`expr`と左辺値`p`に対して、型`Expr`を`decltype((expr))`、型`Promise`を[`decay_t`](/reference/type_traits/decay.md)``とする。 +説明用の式`expr`と`p`に対して、型`Expr`を`decltype((expr))`、型`Promise`を[`decay_t`](/reference/type_traits/decay.md)``とする。 -呼び出し式`as_awaitable(expr, p)`は、`expr`と`p`の評価が不定順で順序付けられることを除いて、下記と等価。 +`p`が左辺値ではない場合、呼び出し式`as_awaitable(expr, p)`は不適格となる。 + +そうでなければ、呼び出し式`as_awaitable(expr, p)`は、`expr`と`p`の評価が不定順で順序付けられることを除いて、下記と等価。 - 適格であるならば、式`expr.as_awaitable(p)` - 適格要件 : 同式の型を`A`としたとき、[`is-awaitable`](../is-awaitable.md)` == true`であるべき。 @@ -263,3 +265,5 @@ value-type await_resume(); - [LWG4361 `awaitable-receiver::set_value` should use Mandates instead of constraints](https://cplusplus.github.io/LWG/issue4361) - [P3941R4 Scheduler Affinity](https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2026/p3941r4.html) - [P4159R0 Make `sender_in` and `receiver_of` exposition-only](https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2026/p4159r0.html) +- [LWG Issue 4359. `as_awaitable(expr, p)` does not define semantics of call if `p` is not an lvalue](https://cplusplus.github.io/LWG/issue4359) + - `p`が左辺値でない場合にこの呼び出しが不適格となることが規定された。それ以前は`p`が左辺値である場合の意味しか規定されておらず、そうでない場合の扱いが不明だった。規格としてはC++29のワーキングドラフトへ適用されたが、未規定だった点の明文化であるため、`as_awaitable`が追加されたC++26へ遡及して適用される From c4a47aab184422058a7eb1bd58e55d38d68836aa Mon Sep 17 00:00:00 2001 From: Akira Takahashi Date: Thu, 27 Aug 2026 15:55:40 +0900 Subject: [PATCH 08/16] =?UTF-8?q?spawn=5Ffuture=20:=20completion=5Fsignatu?= =?UTF-8?q?res=5Fof=5Ft=E3=81=ABenv=E3=81=8C=E6=B8=A1=E3=81=95=E3=82=8C?= =?UTF-8?q?=E3=82=8B=E3=82=88=E3=81=86=E3=81=AB=E3=81=AA=E3=81=A3=E3=81=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- reference/execution/execution/spawn_future.md | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/reference/execution/execution/spawn_future.md b/reference/execution/execution/spawn_future.md index 30ffd7a1d9..5d854001cb 100644 --- a/reference/execution/execution/spawn_future.md +++ b/reference/execution/execution/spawn_future.md @@ -183,9 +183,10 @@ using future-spawned-sender = // exposition only namespace std::execution { template struct spawn-future-state // exposition only - : spawn-future-state-base>> { + : spawn-future-state-base< + completion_signatures_of_t, env<>>> { using sigs-t = // exposition only - completion_signatures_of_t>; + completion_signatures_of_t, env<>>; using receiver-t = // exposition only spawn-future-receiver; using op-t = // exposition only @@ -232,6 +233,7 @@ namespace std::execution { * scope_token[link scope_token.md] * sender[link sender.md] * completion_signatures_of_t[link completion_signatures_of_t.md] +* env[link env.md] * receiver[link receiver.md] * connect_result_t[link connect_result_t.md] * connect[link connect.md] @@ -490,3 +492,5 @@ value=42 - [P3914R0 Assorted NB comment resolutions for Kona 2025](https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3914r0.html), US 228-348 - [P3923R0 Additional NB comment resolutions for Kona 2025](https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3923r0.html), US 227-346, 229-347 - [LWG4540. `future-sender`s returned from `spawn_future` do not forward stop requests to spawned work](https://cplusplus.github.io/LWG/issue4540) +- [LWG Issue 4568. `std::execution::spawn_future` is mishandling dependent senders](https://cplusplus.github.io/LWG/issue4568) + - 説明専用クラステンプレート`spawn-future-state`が[`completion_signatures_of_t`](completion_signatures_of_t.md)へ環境として[`env`](env.md)`<>`を渡すよう修正された。環境を渡さないと、依存センダー (dependent sender) に対して完了シグネチャを求められず不適格となっていたため。規格としてはC++29のワーキングドラフトへ適用されたが、実装不可能な規定の修正であるため、`spawn_future`が追加されたC++26へ遡及して適用される From bf88ad9ed7746b08a9688b63da4ccd01a7367df7 Mon Sep 17 00:00:00 2001 From: Akira Takahashi Date: Thu, 27 Aug 2026 15:56:24 +0900 Subject: [PATCH 09/16] =?UTF-8?q?execution::when=5Fall=20:=20=E5=AD=98?= =?UTF-8?q?=E5=9C=A8=E3=81=97=E3=81=AA=E3=81=84Env=E3=81=AE=E5=A4=89?= =?UTF-8?q?=E3=82=8F=E3=82=8A=E3=81=ABenv=5Fof=5Ft=E3=81=8C=E4=BD=BF?= =?UTF-8?q?=E3=82=8F=E3=82=8C=E3=82=8B=E3=82=88=E3=81=86=E3=81=AB=E3=81=AA?= =?UTF-8?q?=E3=81=A3=E3=81=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- reference/execution/execution/when_all.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/reference/execution/execution/when_all.md b/reference/execution/execution/when_all.md index 6b5938e9fc..d8f681ed8e 100644 --- a/reference/execution/execution/when_all.md +++ b/reference/execution/execution/when_all.md @@ -315,7 +315,7 @@ variant * reset()[link /reference/optional/optional/reset.md] * std::move[link /reference/utility/move.md] - ここで、`Sndrs`の要素`S`において[`completion_signatures_of_t`](completion_signatures_of_t.md)`>`が[`set_stopped_t`](set_stopped.md)`()`を含む`S`が存在するときに限って`sends-stopped`は`true`に等しい。 + ここで、`Sndrs`の要素`S`において[`completion_signatures_of_t`](completion_signatures_of_t.md)`>>`が[`set_stopped_t`](set_stopped.md)`()`を含む`S`が存在するときに限って`sends-stopped`は`true`に等しい。 ## カスタマイゼーションポイント @@ -489,3 +489,5 @@ error=-2 - [LWG 4227. Missing `noexcept` operator in [exec.when.all]](https://cplusplus.github.io/LWG/issue4227) - [LWG 4438. Bad expression in [exec.when.all]](https://cplusplus.github.io/LWG/issue4438) - [P3826R5 Fix Sender Algorithm Customization](https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2026/p3826r5.html) +- [LWG Issue 4579. `make-state::state-type::complete` uses `Env` which is not in scope](https://cplusplus.github.io/LWG/issue4579) + - 説明専用メンバ関数`state-type::complete`における`sends-stopped`の定義が、スコープ内に存在しない`Env`ではなく[`env_of_t`](env_of_t.md)``を使うよう修正された。規格としてはC++29のワーキングドラフトへ適用されたが、記述上の誤りの修正であるため、この規定が追加されたC++26へ遡及して適用される From ae01054ef60e4cd39fbb5a1a5dde8a6f01b8b340 Mon Sep 17 00:00:00 2001 From: Akira Takahashi Date: Thu, 27 Aug 2026 15:56:59 +0900 Subject: [PATCH 10/16] =?UTF-8?q?run-loop-sender=20:=20=E6=BD=9C=E5=9C=A8?= =?UTF-8?q?=E7=9A=84=E3=81=AA=E4=BE=8B=E5=A4=96=E9=80=81=E5=87=BA=E3=81=AE?= =?UTF-8?q?=E8=A6=8F=E5=AE=9A=E3=81=8C=E5=89=8A=E9=99=A4=E3=81=95=E3=82=8C?= =?UTF-8?q?=E3=81=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- reference/execution/execution/run_loop/run-loop-sender.md | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/reference/execution/execution/run_loop/run-loop-sender.md b/reference/execution/execution/run_loop/run-loop-sender.md index 182f7e4a5a..695185964c 100644 --- a/reference/execution/execution/run_loop/run-loop-sender.md +++ b/reference/execution/execution/run_loop/run-loop-sender.md @@ -21,7 +21,8 @@ class run-loop-sender; // exposition only - `run-loop-sender`インスタンスは、関連付けられた[`run_loop`](../run_loop.md)インスタンスの生存期間(lifetime)終了まで有効。 - 説明用の式`sndr`の型を`run-loop-sender`、`CS`が上記[`completion_signatures`](../completion_signatures.md)の特殊化であるとき[`receiver-of`](../receiver-of.md)``が`true`となる式`rcvr`としたとき、 - 式[`connect`](../connect.md)`(sndr, rcvr)`の型は[`run-loop-opstate`](run-loop-opstate.md)`<`[`decay_t`](/reference/type_traits/decay.md)`>`であり、潜在的な例外送出(potentially-throwing)は式`(void(sndr), auto(rcvr))`に従う。 - - 完了タグ`C`を[`set_value_t`](../set_value.md)または[`set_stopped_t`](../set_stopped.md)としたとき、式[`get_completion_scheduler`](../get_completion_scheduler.md)`(`[`get_env`](../get_env.md)`(sndr))`の潜在的な例外送出は`sndr`に従う。式の型は[`run-loop-scheduler`](run-loop-scheduler.md)となり、そのインスタンスは同一`sndr`から取得された場合に等しくなる。 + - 完了タグ`C`を[`set_value_t`](../set_value.md)または[`set_stopped_t`](../set_stopped.md)としたとき、式[`get_completion_scheduler`](../get_completion_scheduler.md)`(`[`get_env`](../get_env.md)`(sndr))`の型は[`run-loop-scheduler`](run-loop-scheduler.md)となり、そのインスタンスは同一`sndr`から取得された場合に等しくなる。 + - この式の潜在的な例外送出は`sndr`に従うと規定されていたが、[`get_env`](../get_env.md)と[`get_completion_scheduler`](../get_completion_scheduler.md)はいずれも例外を送出しないことが要求されるため、冗長な規定として削除された、この規定は冗長だった ## バージョン @@ -40,3 +41,5 @@ class run-loop-sender; // exposition only - [P3557R3 High-Quality Sender Diagnostics with Constexpr Exceptions](https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3557r3.html) - [P3941R4 Scheduler Affinity](https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2026/p3941r4.html) - [P4159R0 Make `sender_in` and `receiver_of` exposition-only](https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2026/p4159r0.html) +- [LWG Issue 4471. Remove test for `get_env noexcept`-ness from `inline_scheduler`](https://cplusplus.github.io/LWG/issue4471) + - [`get_completion_scheduler`](../get_completion_scheduler.md)`(`[`get_env`](../get_env.md)`(sndr))`が潜在的に例外送出するかどうかの規定が削除された。[`get_env`](../get_env.md)も[`get_completion_scheduler`](../get_completion_scheduler.md)も例外を送出しないことが要求されており、冗長だったため。規格としてはC++29のワーキングドラフトへ適用されたが、動作は変わらないため、`run_loop`が追加されたC++26へ遡及して適用される From 2b8e2465889c7c8d4e248d74e4113d87b38d102d Mon Sep 17 00:00:00 2001 From: Akira Takahashi Date: Thu, 27 Aug 2026 15:58:06 +0900 Subject: [PATCH 11/16] =?UTF-8?q?basic=5Fconst=5Fiterator=E3=81=AE?= =?UTF-8?q?=E6=AF=94=E8=BC=83=E6=BC=94=E7=AE=97=E5=AD=90=20:=20=E5=8F=B3?= =?UTF-8?q?=E8=BE=BA=E7=94=A8=E3=81=AE=E3=83=86=E3=83=B3=E3=83=97=E3=83=AC?= =?UTF-8?q?=E3=83=BC=E3=83=88=E3=83=91=E3=83=A9=E3=83=A1=E3=83=BC=E3=82=BF?= =?UTF-8?q?=E3=81=8C=E8=BF=BD=E5=8A=A0=E3=81=95=E3=82=8C=E3=81=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- reference/iterator/basic_const_iterator/op_greater.md | 6 ++++-- reference/iterator/basic_const_iterator/op_greater_equal.md | 6 ++++-- reference/iterator/basic_const_iterator/op_less.md | 6 ++++-- reference/iterator/basic_const_iterator/op_less_equal.md | 6 ++++-- 4 files changed, 16 insertions(+), 8 deletions(-) diff --git a/reference/iterator/basic_const_iterator/op_greater.md b/reference/iterator/basic_const_iterator/op_greater.md index e9dcc0e416..2f6c13dd1e 100644 --- a/reference/iterator/basic_const_iterator/op_greater.md +++ b/reference/iterator/basic_const_iterator/op_greater.md @@ -13,8 +13,8 @@ template I> constexpr bool operator>(const I& y) const requires random_access_iterator && totally_ordered_with; // (2) -template -friend constexpr bool operator>(const I& x, const basic_const_iterator& y) +template J> +friend constexpr bool operator>(const I& x, const basic_const_iterator& y) requires random_access_iterator && totally_ordered_with; // (3) 非メンバ関数 ``` * totally_ordered_with[link /reference/concepts/totally_ordered.md] @@ -107,3 +107,5 @@ false - [P2278R4 `cbegin` should always return a constant iterator](https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2022/p2278r4.html) - [LWG Issue 3769. `basic_const_iterator::operator==` causes infinite constraint recursion](https://cplusplus.github.io/LWG/issue3769) - C++23で、左辺に`basic_const_iterator`をとる比較演算子・`operator-`のオーバーロードが非メンバのフレンド関数からメンバ関数へと変更された(フレンド関数だと`S`から`basic_const_iterator`への暗黙変換によって制約チェックが無限再帰する問題があったため) +- [LWG Issue 4218. Constraint recursion in `basic_const_iterator`'s relational operators due to ADL + CWG 2369](https://cplusplus.github.io/LWG/issue4218) + - 非メンバ版の`friend`宣言に`same_as J`というテンプレートパラメータが追加され、右辺の型が`basic_const_iterator`と書かれるようになった。ADLによって関連付けられた`basic_const_iterator`の`friend`が候補に入ることで、制約の検査が再帰し、コンパイルエラーとなっていたため。規格としてはC++29のワーキングドラフトへ適用されたが、実装不可能な規定の修正であるため、`basic_const_iterator`が追加されたC++23へ遡及して適用される diff --git a/reference/iterator/basic_const_iterator/op_greater_equal.md b/reference/iterator/basic_const_iterator/op_greater_equal.md index 4787adb04c..e6bc71cbd5 100644 --- a/reference/iterator/basic_const_iterator/op_greater_equal.md +++ b/reference/iterator/basic_const_iterator/op_greater_equal.md @@ -13,8 +13,8 @@ template I> constexpr bool operator>=(const I& y) const requires random_access_iterator && totally_ordered_with; // (2) -template -friend constexpr bool operator>=(const I& x, const basic_const_iterator& y) +template J> +friend constexpr bool operator>=(const I& x, const basic_const_iterator& y) requires random_access_iterator && totally_ordered_with; // (3) 非メンバ関数 ``` * totally_ordered_with[link /reference/concepts/totally_ordered.md] @@ -107,3 +107,5 @@ true - [P2278R4 `cbegin` should always return a constant iterator](https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2022/p2278r4.html) - [LWG Issue 3769. `basic_const_iterator::operator==` causes infinite constraint recursion](https://cplusplus.github.io/LWG/issue3769) - C++23で、左辺に`basic_const_iterator`をとる比較演算子・`operator-`のオーバーロードが非メンバのフレンド関数からメンバ関数へと変更された(フレンド関数だと`S`から`basic_const_iterator`への暗黙変換によって制約チェックが無限再帰する問題があったため) +- [LWG Issue 4218. Constraint recursion in `basic_const_iterator`'s relational operators due to ADL + CWG 2369](https://cplusplus.github.io/LWG/issue4218) + - 非メンバ版の`friend`宣言に`same_as J`というテンプレートパラメータが追加され、右辺の型が`basic_const_iterator`と書かれるようになった。ADLによって関連付けられた`basic_const_iterator`の`friend`が候補に入ることで、制約の検査が再帰し、コンパイルエラーとなっていたため。規格としてはC++29のワーキングドラフトへ適用されたが、実装不可能な規定の修正であるため、`basic_const_iterator`が追加されたC++23へ遡及して適用される diff --git a/reference/iterator/basic_const_iterator/op_less.md b/reference/iterator/basic_const_iterator/op_less.md index 31f4189b0a..0701b62852 100644 --- a/reference/iterator/basic_const_iterator/op_less.md +++ b/reference/iterator/basic_const_iterator/op_less.md @@ -13,8 +13,8 @@ template I> constexpr bool operator<(const I& y) const requires random_access_iterator && totally_ordered_with; // (2) -template -friend constexpr bool operator<(const I& x, const basic_const_iterator& y) +template J> +friend constexpr bool operator<(const I& x, const basic_const_iterator& y) requires random_access_iterator && totally_ordered_with; // (3) 非メンバ関数 ``` * totally_ordered_with[link /reference/concepts/totally_ordered.md] @@ -107,3 +107,5 @@ false - [P2278R4 `cbegin` should always return a constant iterator](https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2022/p2278r4.html) - [LWG Issue 3769. `basic_const_iterator::operator==` causes infinite constraint recursion](https://cplusplus.github.io/LWG/issue3769) - C++23で、左辺に`basic_const_iterator`をとる比較演算子・`operator-`のオーバーロードが非メンバのフレンド関数からメンバ関数へと変更された(フレンド関数だと`S`から`basic_const_iterator`への暗黙変換によって制約チェックが無限再帰する問題があったため) +- [LWG Issue 4218. Constraint recursion in `basic_const_iterator`'s relational operators due to ADL + CWG 2369](https://cplusplus.github.io/LWG/issue4218) + - 非メンバ版の`friend`宣言に`same_as J`というテンプレートパラメータが追加され、右辺の型が`basic_const_iterator`と書かれるようになった。ADLによって関連付けられた`basic_const_iterator`の`friend`が候補に入ることで、制約の検査が再帰し、コンパイルエラーとなっていたため。規格としてはC++29のワーキングドラフトへ適用されたが、実装不可能な規定の修正であるため、`basic_const_iterator`が追加されたC++23へ遡及して適用される diff --git a/reference/iterator/basic_const_iterator/op_less_equal.md b/reference/iterator/basic_const_iterator/op_less_equal.md index 1732ccefa2..b3d260d955 100644 --- a/reference/iterator/basic_const_iterator/op_less_equal.md +++ b/reference/iterator/basic_const_iterator/op_less_equal.md @@ -13,8 +13,8 @@ template I> constexpr bool operator<=(const I& y) const requires random_access_iterator && totally_ordered_with; // (2) -template -friend constexpr bool operator<=(const I& x, const basic_const_iterator& y) +template J> +friend constexpr bool operator<=(const I& x, const basic_const_iterator& y) requires random_access_iterator && totally_ordered_with; // (3) 非メンバ関数 ``` * totally_ordered_with[link /reference/concepts/totally_ordered.md] @@ -107,3 +107,5 @@ true - [P2278R4 `cbegin` should always return a constant iterator](https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2022/p2278r4.html) - [LWG Issue 3769. `basic_const_iterator::operator==` causes infinite constraint recursion](https://cplusplus.github.io/LWG/issue3769) - C++23で、左辺に`basic_const_iterator`をとる比較演算子・`operator-`のオーバーロードが非メンバのフレンド関数からメンバ関数へと変更された(フレンド関数だと`S`から`basic_const_iterator`への暗黙変換によって制約チェックが無限再帰する問題があったため) +- [LWG Issue 4218. Constraint recursion in `basic_const_iterator`'s relational operators due to ADL + CWG 2369](https://cplusplus.github.io/LWG/issue4218) + - 非メンバ版の`friend`宣言に`same_as J`というテンプレートパラメータが追加され、右辺の型が`basic_const_iterator`と書かれるようになった。ADLによって関連付けられた`basic_const_iterator`の`friend`が候補に入ることで、制約の検査が再帰し、コンパイルエラーとなっていたため。規格としてはC++29のワーキングドラフトへ適用されたが、実装不可能な規定の修正であるため、`basic_const_iterator`が追加されたC++23へ遡及して適用される From b25c0dc8e01fa6a638f309f151d756939b9776ba Mon Sep 17 00:00:00 2001 From: Akira Takahashi Date: Thu, 27 Aug 2026 16:16:23 +0900 Subject: [PATCH 12/16] =?UTF-8?q?move=5Fiterator=E3=81=AE=E3=82=B3?= =?UTF-8?q?=E3=83=B3=E3=82=B9=E3=83=88=E3=83=A9=E3=82=AF=E3=82=BF=20:=20C+?= =?UTF-8?q?+29=E3=81=A7=E3=83=87=E3=83=95=E3=82=A9=E3=83=AB=E3=83=88?= =?UTF-8?q?=E3=82=B3=E3=83=B3=E3=82=B9=E3=83=88=E3=83=A9=E3=82=AF=E3=82=BF?= =?UTF-8?q?=E3=81=AB=E8=A6=81=E4=BB=B6=E8=BF=BD=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- reference/iterator/move_iterator/op_constructor.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/reference/iterator/move_iterator/op_constructor.md b/reference/iterator/move_iterator/op_constructor.md index 312ba98ff6..27c8b6b542 100644 --- a/reference/iterator/move_iterator/op_constructor.md +++ b/reference/iterator/move_iterator/op_constructor.md @@ -8,6 +8,8 @@ ```cpp move_iterator(); // (1) C++11 constexpr move_iterator(); // (1) C++17 +constexpr move_iterator() + requires default_initializable = default; // (1) C++29 explicit move_iterator(Iterator i); // (2) C++11 constexpr explicit move_iterator(Iterator i); // (2) C++17 @@ -25,6 +27,7 @@ constexpr move_iterator(move_iterator&&) noexcept = default; // (4) C++17 `move_iterator`オブジェクトを構築する。 - (1) : デフォルトコンストラクタ。内包する元となるイテレータを値初期化する。このイテレータに対する操作は、値初期化された`Iterator`型のイテレータに対して対応する操作が定義されている場合にのみ、定義された動作をする。 + - C++29 : `Iterator`がデフォルト構築可能である場合にのみ使用でき、`= default`で定義される。内包するイテレータはメンバ初期化子`= Iterator()`によって値初期化される - (2) : 元となるイテレータ`i`をメンバ変数にムーブして保持する。 - (3) : `u.base()`をメンバ変数に保持する。 @@ -91,3 +94,6 @@ int main() - [LWG Issue 1012. `reverse_iterator` default ctor should value initialize](https://cplusplus.github.io/LWG/issue1012) - C++11で、デフォルトコンストラクタの効果が、内包するイテレータのデフォルト初期化から値初期化へ改められた - [LWG Issue 3435. `three_way_comparable_with, reverse_iterator>`](https://cplusplus.github.io/LWG/issue3435) +- [LWG Issue 4125. `move_iterator`'s default constructor should be constrained](https://cplusplus.github.io/LWG/issue4125) + - C++29で、デフォルトコンストラクタが[`default_initializable`](/reference/concepts/default_initializable.md)``で制約され、`= default`で定義されるようになった。`Iterator`がデフォルト構築できない場合でも`move_iterator`がデフォルト構築可能であるかのように見えていたため + - この変更によって[`default_initializable`](/reference/concepts/default_initializable.md)`>`の判定結果が変わりうるため、ほかのIssueと異なり、以前のバージョンへ遡及して適用されるとは限らない From 3435262eb2a1b749c1f7b4cb816b31f27175c74b Mon Sep 17 00:00:00 2001 From: Akira Takahashi Date: Thu, 27 Aug 2026 16:26:21 +0900 Subject: [PATCH 13/16] =?UTF-8?q?iterator=E3=81=AE=E5=90=84=E3=82=A2?= =?UTF-8?q?=E3=82=AF=E3=82=BB=E3=83=83=E3=82=B5=E9=96=A2=E6=95=B0=20:=20?= =?UTF-8?q?=E5=88=A5=E3=81=AA=E3=83=98=E3=83=83=E3=83=80=E3=81=A7=E3=82=82?= =?UTF-8?q?=E4=BD=BF=E3=81=88=E3=82=8B=E4=B8=80=E8=A6=A7=E3=82=92=E8=A8=98?= =?UTF-8?q?=E8=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- reference/iterator/begin.md | 23 ++++++++++++++++++++++- reference/iterator/cbegin.md | 24 ++++++++++++++++++++++++ reference/iterator/cend.md | 24 ++++++++++++++++++++++++ reference/iterator/crbegin.md | 24 ++++++++++++++++++++++++ reference/iterator/crend.md | 24 ++++++++++++++++++++++++ reference/iterator/data.md | 32 ++++++++++++++++++++------------ reference/iterator/empty.md | 32 ++++++++++++++++++++------------ reference/iterator/end.md | 23 ++++++++++++++++++++++- reference/iterator/rbegin.md | 24 ++++++++++++++++++++++++ reference/iterator/rend.md | 24 ++++++++++++++++++++++++ reference/iterator/size.md | 32 ++++++++++++++++++++------------ reference/iterator/ssize.md | 24 ++++++++++++++++++++++++ 12 files changed, 272 insertions(+), 38 deletions(-) diff --git a/reference/iterator/begin.md b/reference/iterator/begin.md index 22689d2ac2..d53383a29d 100644 --- a/reference/iterator/begin.md +++ b/reference/iterator/begin.md @@ -61,7 +61,26 @@ namespace std { ## 備考 -この関数は、範囲`for`文の実装に使用される。 +- ``ヘッダを読み込む以外では、以下のヘッダが読み込まれている場合に、この関数を使用できる: + - [``](/reference/array.md) + - [``](/reference/deque.md) + - [``](/reference/flat_map.md) (C++26) + - [``](/reference/flat_set.md) (C++26) + - [``](/reference/forward_list.md) + - [``](/reference/hive.md) (C++26) + - [``](/reference/inplace_vector.md) (C++26) + - [``](/reference/list.md) + - [``](/reference/map.md) + - [``](/reference/regex.md) + - [``](/reference/set.md) + - [``](/reference/simd.md) (C++29) + - [``](/reference/span.md) (C++20) + - [``](/reference/string.md) + - [``](/reference/string_view.md) (C++20) + - [``](/reference/unordered_map.md) + - [``](/reference/unordered_set.md) + - [``](/reference/vector.md) +- この関数は、範囲`for`文の実装に使用される。 ## 例 @@ -125,3 +144,5 @@ int main() - [LWG2280 - begin/end for arrays should be constexpr and noexcept](http://www.open-std.org/jtc1/sc22/wg21/docs/lwg-active.html#2280) - [P0031R0 A Proposal to Add Constexpr Modifiers to `reverse_iterator`, `move_iterator`, `array` and Range Access](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2015/p0031r0.html) - [P3016R6 Resolve inconsistencies in `begin`/`end` for `valarray` and `braced-initializer-list`](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3016r6.html) +- [LWG Issue 4385. Including `` doesn't provide `std::begin/end`](https://cplusplus.github.io/LWG/issue4385) + - この関数テンプレートが利用可能になるヘッダの一覧に[``](/reference/simd.md)が追加された。規格としてはC++29のワーキングドラフトへ適用されたが、[``](/reference/simd.md)が追加されたC++26で記載が漏れていたものであるため、C++26へ遡及して適用される diff --git a/reference/iterator/cbegin.md b/reference/iterator/cbegin.md index 2173ba7591..7734824c24 100644 --- a/reference/iterator/cbegin.md +++ b/reference/iterator/cbegin.md @@ -25,6 +25,28 @@ return std::begin(c); パラメータを`const`で受け取っているので、`std::begin()`を経由することで、読み取り専用イテレータを取得している。 +## 備考 +- ``ヘッダを読み込む以外では、以下のヘッダが読み込まれている場合に、この関数を使用できる: + - [``](/reference/array.md) + - [``](/reference/deque.md) + - [``](/reference/flat_map.md) (C++26) + - [``](/reference/flat_set.md) (C++26) + - [``](/reference/forward_list.md) + - [``](/reference/hive.md) (C++26) + - [``](/reference/inplace_vector.md) (C++26) + - [``](/reference/list.md) + - [``](/reference/map.md) + - [``](/reference/regex.md) + - [``](/reference/set.md) + - [``](/reference/simd.md) (C++29) + - [``](/reference/span.md) (C++20) + - [``](/reference/string.md) + - [``](/reference/string_view.md) (C++20) + - [``](/reference/unordered_map.md) + - [``](/reference/unordered_set.md) + - [``](/reference/vector.md) + + ## 例 ```cpp example #include @@ -68,3 +90,5 @@ int main() ## 参照 - [LWG Issue 2128. Absence of global functions `cbegin`/`cend`](http://www.open-std.org/jtc1/sc22/wg21/docs/lwg-defects.html#2128) - [P3016R6 Resolve inconsistencies in `begin`/`end` for `valarray` and `braced-initializer-list`](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3016r6.html) +- [LWG Issue 4385. Including `` doesn't provide `std::begin/end`](https://cplusplus.github.io/LWG/issue4385) + - この関数テンプレートが利用可能になるヘッダの一覧に[``](/reference/simd.md)が追加された。規格としてはC++29のワーキングドラフトへ適用されたが、[``](/reference/simd.md)が追加されたC++26で記載が漏れていたものであるため、C++26へ遡及して適用される diff --git a/reference/iterator/cend.md b/reference/iterator/cend.md index 91837eb2df..8635ed86fc 100644 --- a/reference/iterator/cend.md +++ b/reference/iterator/cend.md @@ -25,6 +25,28 @@ return std::end(c); パラメータを`const`で受け取っているので、`std::end()`を経由することで、読み取り専用イテレータを取得している。 +## 備考 +- ``ヘッダを読み込む以外では、以下のヘッダが読み込まれている場合に、この関数を使用できる: + - [``](/reference/array.md) + - [``](/reference/deque.md) + - [``](/reference/flat_map.md) (C++26) + - [``](/reference/flat_set.md) (C++26) + - [``](/reference/forward_list.md) + - [``](/reference/hive.md) (C++26) + - [``](/reference/inplace_vector.md) (C++26) + - [``](/reference/list.md) + - [``](/reference/map.md) + - [``](/reference/regex.md) + - [``](/reference/set.md) + - [``](/reference/simd.md) (C++29) + - [``](/reference/span.md) (C++20) + - [``](/reference/string.md) + - [``](/reference/string_view.md) (C++20) + - [``](/reference/unordered_map.md) + - [``](/reference/unordered_set.md) + - [``](/reference/vector.md) + + ## 例 ```cpp example #include @@ -68,3 +90,5 @@ int main() ## 参照 - [LWG Issue 2128. Absence of global functions `cbegin`/`cend`](http://www.open-std.org/jtc1/sc22/wg21/docs/lwg-defects.html#2128) - [P3016R6 Resolve inconsistencies in `begin`/`end` for `valarray` and `braced-initializer-list`](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3016r6.html) +- [LWG Issue 4385. Including `` doesn't provide `std::begin/end`](https://cplusplus.github.io/LWG/issue4385) + - この関数テンプレートが利用可能になるヘッダの一覧に[``](/reference/simd.md)が追加された。規格としてはC++29のワーキングドラフトへ適用されたが、[``](/reference/simd.md)が追加されたC++26で記載が漏れていたものであるため、C++26へ遡及して適用される diff --git a/reference/iterator/crbegin.md b/reference/iterator/crbegin.md index 7445f88728..24fded54be 100644 --- a/reference/iterator/crbegin.md +++ b/reference/iterator/crbegin.md @@ -30,6 +30,28 @@ std::rbegin(c); * std::rbegin[link rbegin.md] +## 備考 +- ``ヘッダを読み込む以外では、以下のヘッダが読み込まれている場合に、この関数を使用できる: + - [``](/reference/array.md) + - [``](/reference/deque.md) + - [``](/reference/flat_map.md) (C++26) + - [``](/reference/flat_set.md) (C++26) + - [``](/reference/forward_list.md) + - [``](/reference/hive.md) (C++26) + - [``](/reference/inplace_vector.md) (C++26) + - [``](/reference/list.md) + - [``](/reference/map.md) + - [``](/reference/regex.md) + - [``](/reference/set.md) + - [``](/reference/simd.md) (C++29) + - [``](/reference/span.md) (C++20) + - [``](/reference/string.md) + - [``](/reference/string_view.md) (C++20) + - [``](/reference/unordered_map.md) + - [``](/reference/unordered_set.md) + - [``](/reference/vector.md) + + ## 例 ```cpp example #include @@ -102,3 +124,5 @@ int main() ## 参照 - [LWG Issue 2128. Absence of global functions `cbegin`/`cend`](http://www.open-std.org/jtc1/sc22/wg21/docs/lwg-defects.html#2128) - [P3016R6 Resolve inconsistencies in `begin`/`end` for `valarray` and `braced-initializer-list`](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3016r6.html) +- [LWG Issue 4385. Including `` doesn't provide `std::begin/end`](https://cplusplus.github.io/LWG/issue4385) + - この関数テンプレートが利用可能になるヘッダの一覧に[``](/reference/simd.md)が追加された。規格としてはC++29のワーキングドラフトへ適用されたが、[``](/reference/simd.md)が追加されたC++26で記載が漏れていたものであるため、C++26へ遡及して適用される diff --git a/reference/iterator/crend.md b/reference/iterator/crend.md index 6201900b89..3320e10dd5 100644 --- a/reference/iterator/crend.md +++ b/reference/iterator/crend.md @@ -30,6 +30,28 @@ std::rend(c); * std::rend[link rend.md] +## 備考 +- ``ヘッダを読み込む以外では、以下のヘッダが読み込まれている場合に、この関数を使用できる: + - [``](/reference/array.md) + - [``](/reference/deque.md) + - [``](/reference/flat_map.md) (C++26) + - [``](/reference/flat_set.md) (C++26) + - [``](/reference/forward_list.md) + - [``](/reference/hive.md) (C++26) + - [``](/reference/inplace_vector.md) (C++26) + - [``](/reference/list.md) + - [``](/reference/map.md) + - [``](/reference/regex.md) + - [``](/reference/set.md) + - [``](/reference/simd.md) (C++29) + - [``](/reference/span.md) (C++20) + - [``](/reference/string.md) + - [``](/reference/string_view.md) (C++20) + - [``](/reference/unordered_map.md) + - [``](/reference/unordered_set.md) + - [``](/reference/vector.md) + + ## 例 ```cpp example #include @@ -102,3 +124,5 @@ int main() ## 参照 - [LWG Issue 2128. Absence of global functions `cbegin`/`cend`](http://www.open-std.org/jtc1/sc22/wg21/docs/lwg-defects.html#2128) - [P3016R6 Resolve inconsistencies in `begin`/`end` for `valarray` and `braced-initializer-list`](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3016r6.html) +- [LWG Issue 4385. Including `` doesn't provide `std::begin/end`](https://cplusplus.github.io/LWG/issue4385) + - この関数テンプレートが利用可能になるヘッダの一覧に[``](/reference/simd.md)が追加された。規格としてはC++29のワーキングドラフトへ適用されたが、[``](/reference/simd.md)が追加されたC++26で記載が漏れていたものであるため、C++26へ遡及して適用される diff --git a/reference/iterator/data.md b/reference/iterator/data.md index fc00782f82..1a85f60428 100644 --- a/reference/iterator/data.md +++ b/reference/iterator/data.md @@ -50,18 +50,24 @@ namespace std { ## 備考 - [機能テストマクロ](../../lang/cpp17/feature_test_macros.md)は`__cpp_lib_nonmember_container_access`で値は`201411` - ``ヘッダを読み込む以外では、以下のヘッダが読み込まれている場合に、この関数を使用できる: - - [``](../array.md) - - [``](../deque.md) - - [``](../forward_list.md) - - [``](../list.md) - - [``](../map.md) - - [``](../regex.md) - - [``](../set.md) - - [``](../string.md) - - [``](../string_view.md) (C++20) - - [``](../unordered_map.md) - - [``](../unordered_set.md) - - [``](../vector.md) + - [``](/reference/array.md) + - [``](/reference/deque.md) + - [``](/reference/flat_map.md) (C++26) + - [``](/reference/flat_set.md) (C++26) + - [``](/reference/forward_list.md) + - [``](/reference/hive.md) (C++26) + - [``](/reference/inplace_vector.md) (C++26) + - [``](/reference/list.md) + - [``](/reference/map.md) + - [``](/reference/regex.md) + - [``](/reference/set.md) + - [``](/reference/simd.md) (C++29) + - [``](/reference/span.md) (C++20) + - [``](/reference/string.md) + - [``](/reference/string_view.md) (C++20) + - [``](/reference/unordered_map.md) + - [``](/reference/unordered_set.md) + - [``](/reference/vector.md) ## 例 @@ -106,3 +112,5 @@ array size:1 at 0x22e42b0 - [N4280: Non-member `data()` and more (Revision 2)](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n4280.pdf) - [LWG Issue 3009. Including `` doesn't provide `std::size/empty/data`](https://wg21.cmeerw.net/lwg/issue3009) - [P3016R6 Resolve inconsistencies in `begin`/`end` for `valarray` and `braced-initializer-list`](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3016r6.html) +- [LWG Issue 4385. Including `` doesn't provide `std::begin/end`](https://cplusplus.github.io/LWG/issue4385) + - この関数テンプレートが利用可能になるヘッダの一覧に[``](/reference/simd.md)が追加された。規格としてはC++29のワーキングドラフトへ適用されたが、[``](/reference/simd.md)が追加されたC++26で記載が漏れていたものであるため、C++26へ遡及して適用される diff --git a/reference/iterator/empty.md b/reference/iterator/empty.md index 8f0010614a..babbb47a51 100644 --- a/reference/iterator/empty.md +++ b/reference/iterator/empty.md @@ -57,18 +57,24 @@ namespace std { ## 備考 - [機能テストマクロ](../../lang/cpp17/feature_test_macros.md)は`__cpp_lib_nonmember_container_access`で値は`201411` - ``ヘッダを読み込む以外では、以下のヘッダが読み込まれている場合に、この関数を使用できる: - - [``](../array.md) - - [``](../deque.md) - - [``](../forward_list.md) - - [``](../list.md) - - [``](../map.md) - - [``](../regex.md) - - [``](../set.md) - - [``](../string.md) - - [``](../string_view.md) (C++20) - - [``](../unordered_map.md) - - [``](../unordered_set.md) - - [``](../vector.md) + - [``](/reference/array.md) + - [``](/reference/deque.md) + - [``](/reference/flat_map.md) (C++26) + - [``](/reference/flat_set.md) (C++26) + - [``](/reference/forward_list.md) + - [``](/reference/hive.md) (C++26) + - [``](/reference/inplace_vector.md) (C++26) + - [``](/reference/list.md) + - [``](/reference/map.md) + - [``](/reference/regex.md) + - [``](/reference/set.md) + - [``](/reference/simd.md) (C++29) + - [``](/reference/span.md) (C++20) + - [``](/reference/string.md) + - [``](/reference/string_view.md) (C++20) + - [``](/reference/unordered_map.md) + - [``](/reference/unordered_set.md) + - [``](/reference/vector.md) ## 例 @@ -124,3 +130,5 @@ false - [P2422R1 Remove `nodiscard` annotations from the standard library specification](https://open-std.org/jtc1/sc22/wg21/docs/papers/2024/p2422r1.html) - C++26で`[[nodiscard]]`指定が削除された - [P3016R6 Resolve inconsistencies in `begin`/`end` for `valarray` and `braced-initializer-list`](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3016r6.html) +- [LWG Issue 4385. Including `` doesn't provide `std::begin/end`](https://cplusplus.github.io/LWG/issue4385) + - この関数テンプレートが利用可能になるヘッダの一覧に[``](/reference/simd.md)が追加された。規格としてはC++29のワーキングドラフトへ適用されたが、[``](/reference/simd.md)が追加されたC++26で記載が漏れていたものであるため、C++26へ遡及して適用される diff --git a/reference/iterator/end.md b/reference/iterator/end.md index 4720c3146c..04582b0e6d 100644 --- a/reference/iterator/end.md +++ b/reference/iterator/end.md @@ -61,7 +61,26 @@ namespace std { ## 備考 -この関数は、範囲`for`文の実装に使用される。 +- ``ヘッダを読み込む以外では、以下のヘッダが読み込まれている場合に、この関数を使用できる: + - [``](/reference/array.md) + - [``](/reference/deque.md) + - [``](/reference/flat_map.md) (C++26) + - [``](/reference/flat_set.md) (C++26) + - [``](/reference/forward_list.md) + - [``](/reference/hive.md) (C++26) + - [``](/reference/inplace_vector.md) (C++26) + - [``](/reference/list.md) + - [``](/reference/map.md) + - [``](/reference/regex.md) + - [``](/reference/set.md) + - [``](/reference/simd.md) (C++29) + - [``](/reference/span.md) (C++20) + - [``](/reference/string.md) + - [``](/reference/string_view.md) (C++20) + - [``](/reference/unordered_map.md) + - [``](/reference/unordered_set.md) + - [``](/reference/vector.md) +- この関数は、範囲`for`文の実装に使用される。 ## 例 @@ -124,3 +143,5 @@ int main() - [LWG2280 - begin/end for arrays should be constexpr and noexcept](http://www.open-std.org/jtc1/sc22/wg21/docs/lwg-active.html#2280) - [P0031R0 A Proposal to Add Constexpr Modifiers to `reverse_iterator`, `move_iterator`, `array` and Range Access](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2015/p0031r0.html) - [P3016R6 Resolve inconsistencies in `begin`/`end` for `valarray` and `braced-initializer-list`](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3016r6.html) +- [LWG Issue 4385. Including `` doesn't provide `std::begin/end`](https://cplusplus.github.io/LWG/issue4385) + - この関数テンプレートが利用可能になるヘッダの一覧に[``](/reference/simd.md)が追加された。規格としてはC++29のワーキングドラフトへ適用されたが、[``](/reference/simd.md)が追加されたC++26で記載が漏れていたものであるため、C++26へ遡及して適用される diff --git a/reference/iterator/rbegin.md b/reference/iterator/rbegin.md index 7acdbca091..7f5a01f0c9 100644 --- a/reference/iterator/rbegin.md +++ b/reference/iterator/rbegin.md @@ -69,6 +69,28 @@ namespace std { - (4) : [`reverse_iterator`](reverse_iterator.md)`(`[`il.end()`](/reference/initializer_list/initializer_list/end.md)`)` +## 備考 +- ``ヘッダを読み込む以外では、以下のヘッダが読み込まれている場合に、この関数を使用できる: + - [``](/reference/array.md) + - [``](/reference/deque.md) + - [``](/reference/flat_map.md) (C++26) + - [``](/reference/flat_set.md) (C++26) + - [``](/reference/forward_list.md) + - [``](/reference/hive.md) (C++26) + - [``](/reference/inplace_vector.md) (C++26) + - [``](/reference/list.md) + - [``](/reference/map.md) + - [``](/reference/regex.md) + - [``](/reference/set.md) + - [``](/reference/simd.md) (C++29) + - [``](/reference/span.md) (C++20) + - [``](/reference/string.md) + - [``](/reference/string_view.md) (C++20) + - [``](/reference/unordered_map.md) + - [``](/reference/unordered_set.md) + - [``](/reference/vector.md) + + ## 例 ```cpp example #include @@ -142,3 +164,5 @@ int main() - [LWG Issue 2128. Absence of global functions `cbegin`/`cend`](http://www.open-std.org/jtc1/sc22/wg21/docs/lwg-defects.html#2128) - [P0031R0 A Proposal to Add Constexpr Modifiers to `reverse_iterator`, `move_iterator`, `array` and Range Access](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2015/p0031r0.html) - [P3016R6 Resolve inconsistencies in `begin`/`end` for `valarray` and `braced-initializer-list`](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3016r6.html) +- [LWG Issue 4385. Including `` doesn't provide `std::begin/end`](https://cplusplus.github.io/LWG/issue4385) + - この関数テンプレートが利用可能になるヘッダの一覧に[``](/reference/simd.md)が追加された。規格としてはC++29のワーキングドラフトへ適用されたが、[``](/reference/simd.md)が追加されたC++26で記載が漏れていたものであるため、C++26へ遡及して適用される diff --git a/reference/iterator/rend.md b/reference/iterator/rend.md index e485f0baff..70b6ed9485 100644 --- a/reference/iterator/rend.md +++ b/reference/iterator/rend.md @@ -69,6 +69,28 @@ namespace std { - (4) : [`reverse_iterator`](reverse_iterator.md)`(`[`il.begin()`](/reference/initializer_list/initializer_list/begin.md)`)` +## 備考 +- ``ヘッダを読み込む以外では、以下のヘッダが読み込まれている場合に、この関数を使用できる: + - [``](/reference/array.md) + - [``](/reference/deque.md) + - [``](/reference/flat_map.md) (C++26) + - [``](/reference/flat_set.md) (C++26) + - [``](/reference/forward_list.md) + - [``](/reference/hive.md) (C++26) + - [``](/reference/inplace_vector.md) (C++26) + - [``](/reference/list.md) + - [``](/reference/map.md) + - [``](/reference/regex.md) + - [``](/reference/set.md) + - [``](/reference/simd.md) (C++29) + - [``](/reference/span.md) (C++20) + - [``](/reference/string.md) + - [``](/reference/string_view.md) (C++20) + - [``](/reference/unordered_map.md) + - [``](/reference/unordered_set.md) + - [``](/reference/vector.md) + + ## 例 ```cpp example #include @@ -142,3 +164,5 @@ int main() - [LWG Issue 2128. Absence of global functions `cbegin`/`cend`](http://www.open-std.org/jtc1/sc22/wg21/docs/lwg-defects.html#2128) - [P0031R0 A Proposal to Add Constexpr Modifiers to `reverse_iterator`, `move_iterator`, `array` and Range Access](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2015/p0031r0.html) - [P3016R6 Resolve inconsistencies in `begin`/`end` for `valarray` and `braced-initializer-list`](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3016r6.html) +- [LWG Issue 4385. Including `` doesn't provide `std::begin/end`](https://cplusplus.github.io/LWG/issue4385) + - この関数テンプレートが利用可能になるヘッダの一覧に[``](/reference/simd.md)が追加された。規格としてはC++29のワーキングドラフトへ適用されたが、[``](/reference/simd.md)が追加されたC++26で記載が漏れていたものであるため、C++26へ遡及して適用される diff --git a/reference/iterator/size.md b/reference/iterator/size.md index e5eff625bc..20261de546 100644 --- a/reference/iterator/size.md +++ b/reference/iterator/size.md @@ -34,18 +34,24 @@ namespace std { ## 備考 - [機能テストマクロ](../../lang/cpp17/feature_test_macros.md)は`__cpp_lib_nonmember_container_access`で値は`201411` - ``ヘッダを読み込む以外では、以下のヘッダが読み込まれている場合に、この関数を使用できる: - - [``](../array.md) - - [``](../deque.md) - - [``](../forward_list.md) - - [``](../list.md) - - [``](../map.md) - - [``](../regex.md) - - [``](../set.md) - - [``](../string.md) - - [``](../string_view.md) (C++20) - - [``](../unordered_map.md) - - [``](../unordered_set.md) - - [``](../vector.md) + - [``](/reference/array.md) + - [``](/reference/deque.md) + - [``](/reference/flat_map.md) (C++26) + - [``](/reference/flat_set.md) (C++26) + - [``](/reference/forward_list.md) + - [``](/reference/hive.md) (C++26) + - [``](/reference/inplace_vector.md) (C++26) + - [``](/reference/list.md) + - [``](/reference/map.md) + - [``](/reference/regex.md) + - [``](/reference/set.md) + - [``](/reference/simd.md) (C++29) + - [``](/reference/span.md) (C++20) + - [``](/reference/string.md) + - [``](/reference/string_view.md) (C++20) + - [``](/reference/unordered_map.md) + - [``](/reference/unordered_set.md) + - [``](/reference/vector.md) ## 例 @@ -110,3 +116,5 @@ int main() - [N4280: Non-member `size()` and more (Revision 2)](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n4280.pdf) - [LWG Issue 3009. Including `` doesn't provide `std::size/empty/data`](https://wg21.cmeerw.net/lwg/issue3009) - [P3016R6 Resolve inconsistencies in `begin`/`end` for `valarray` and `braced-initializer-list`](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3016r6.html) +- [LWG Issue 4385. Including `` doesn't provide `std::begin/end`](https://cplusplus.github.io/LWG/issue4385) + - この関数テンプレートが利用可能になるヘッダの一覧に[``](/reference/simd.md)が追加された。規格としてはC++29のワーキングドラフトへ適用されたが、[``](/reference/simd.md)が追加されたC++26で記載が漏れていたものであるため、C++26へ遡及して適用される diff --git a/reference/iterator/ssize.md b/reference/iterator/ssize.md index c7d45bfa7b..d313680cd4 100644 --- a/reference/iterator/ssize.md +++ b/reference/iterator/ssize.md @@ -38,6 +38,28 @@ namespace std { - (2) : `return N;` +## 備考 +- ``ヘッダを読み込む以外では、以下のヘッダが読み込まれている場合に、この関数を使用できる: + - [``](/reference/array.md) + - [``](/reference/deque.md) + - [``](/reference/flat_map.md) (C++26) + - [``](/reference/flat_set.md) (C++26) + - [``](/reference/forward_list.md) + - [``](/reference/hive.md) (C++26) + - [``](/reference/inplace_vector.md) (C++26) + - [``](/reference/list.md) + - [``](/reference/map.md) + - [``](/reference/regex.md) + - [``](/reference/set.md) + - [``](/reference/simd.md) (C++29) + - [``](/reference/span.md) (C++20) + - [``](/reference/string.md) + - [``](/reference/string_view.md) (C++20) + - [``](/reference/unordered_map.md) + - [``](/reference/unordered_set.md) + - [``](/reference/vector.md) + + ## 例 ```cpp example #include @@ -83,3 +105,5 @@ int main() ## 参照 - [P1227: Signed `ssize()` functions, unsigned `size()` functions (Revision 2)](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2019/p1227r2.html) - [P3016R6 Resolve inconsistencies in `begin`/`end` for `valarray` and `braced-initializer-list`](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3016r6.html) +- [LWG Issue 4385. Including `` doesn't provide `std::begin/end`](https://cplusplus.github.io/LWG/issue4385) + - この関数テンプレートが利用可能になるヘッダの一覧に[``](/reference/simd.md)が追加された。規格としてはC++29のワーキングドラフトへ適用されたが、[``](/reference/simd.md)が追加されたC++26で記載が漏れていたものであるため、C++26へ遡及して適用される From 7944348040253ae7dd6bcc9df73666375d523976 Mon Sep 17 00:00:00 2001 From: Akira Takahashi Date: Thu, 27 Aug 2026 16:32:35 +0900 Subject: [PATCH 14/16] =?UTF-8?q?lazy=5Fsplit=5Fview=20:=20=E6=9C=AB?= =?UTF-8?q?=E5=B0=BE=E3=81=AE=E7=A9=BARange=E3=81=AB=E3=81=A4=E3=81=84?= =?UTF-8?q?=E3=81=A6C++29=E3=81=A7=E5=85=A5=E3=81=A3=E3=81=9F=E3=81=8CC++2?= =?UTF-8?q?0=E3=81=AB=E9=81=A1=E5=8F=8A=E9=81=A9=E7=94=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- reference/ranges/lazy_split_view.md | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/reference/ranges/lazy_split_view.md b/reference/ranges/lazy_split_view.md index 1f7a6222fb..0028acadd7 100644 --- a/reference/ranges/lazy_split_view.md +++ b/reference/ranges/lazy_split_view.md @@ -42,6 +42,11 @@ namespace std::ranges { - (1): `V`が[`forward_range`](forward_range.md)のとき +### 末尾の空Range + +入力Rangeがデリミタで終わっている場合、末尾に空のRangeが1つ得られる。たとえば`"a,b,"`を`','`で分割すると、`"a"`、`"b"`、`""`の3つの部分Rangeが得られる。 + + ## テンプレートパラメータ制約 説明専用コンセプト`tiny-range`を次のように定義する。 @@ -172,3 +177,5 @@ int main() { - [P2210R2 Superior String Splitting](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2021/p2210r2.html) - [N4861 24 Ranges library](https://timsong-cpp.github.io/cppwp/n4861/ranges) - [C++20 ranges](https://techbookfest.org/product/5134506308665344) +- [LWG Issue 4249. The past end issue for `lazy_split_view`](https://cplusplus.github.io/LWG/issue4249) + - `V`が[`forward_range`](forward_range.md)ではない場合に、末尾の空Rangeが得られるよう修正された。入力Rangeがデリミタで終わっているかどうかを、[`forward_range`](forward_range.md)でない場合は先読みで判定できないため。規格としてはC++29のワーキングドラフトへ適用されたが、意図された動作にならない欠陥の修正であるため、`lazy_split_view`が追加されたC++20へ遡及して適用される From 39e3561efb23b893aa20cb615fa6c085dae2290f Mon Sep 17 00:00:00 2001 From: Akira Takahashi Date: Thu, 27 Aug 2026 16:43:40 +0900 Subject: [PATCH 15/16] =?UTF-8?q?ranges::to=20:=20emplace=E3=81=AE?= =?UTF-8?q?=E4=BB=A3=E3=82=8F=E3=82=8A=E3=81=ABemplace=5Fhint=E3=81=8C?= =?UTF-8?q?=E4=BD=BF=E3=82=8F=E3=82=8C=E3=82=8B=E3=82=88=E3=81=86=E3=81=AB?= =?UTF-8?q?=E3=81=AA=E3=81=A3=E3=81=9F=E3=80=82=E9=81=A1=E5=8F=8A=E9=81=A9?= =?UTF-8?q?=E7=94=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- reference/ranges/to.md | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/reference/ranges/to.md b/reference/ranges/to.md index c8f309f0a9..2e21985f72 100644 --- a/reference/ranges/to.md +++ b/reference/ranges/to.md @@ -137,13 +137,13 @@ constexpr bool reservable-container = { c.max_size() } -> same_as; // コンテナのサイズ型を返すmax_sizeメンバ関数がある }; -// container-insertable: emplace_back/push_back/emplace/insertのいずれかが使えることを要求するコンセプト +// container-insertable: emplace_back/push_back/emplace_hint/insertのいずれかが使えることを要求するコンセプト template constexpr bool container-insertable = requires(Container& c, Ref&& ref) { requires (requires { c.emplace_back(declval()); } || requires { c.push_back(declval()); } || - requires { c.emplace(c.end(), declval()); } || + requires { c.emplace_hint(c.end(), declval()); } || requires { c.insert(c.end(), declval()); }); }; @@ -244,3 +244,5 @@ int main() { - C++26で、再帰分岐において`r`を[`ranges::ref_view`](ref_view.md)で包むよう修正され、`r`がviewでない左辺値rangeの場合に不適格となる問題が解消された - [LWG Issue 4016. *container-insertable* checks do not match what *container-inserter* does](https://cplusplus.github.io/LWG/issue4016) - C++26で、説明専用コンセプト`container-insertable`の判定が`emplace_back`/`push_back`/`emplace`/`insert`の4つを試す形に修正され、実際の挿入処理と一致するようになった +- [LWG Issue 4121. `ranges::to` constructs associative containers via `c.emplace(c.end(), *it)`](https://cplusplus.github.io/LWG/issue4121) + - 要素を追加できるかを判定する説明専用コンセプトで、`c.emplace(c.end(), ...)`が`c.emplace_hint(c.end(), ...)`へ改められた。連想コンテナの`emplace()`は挿入位置のヒントを受け取らないため、`c.end()`が要素の構築に使われてしまっていた。規格としてはC++29のワーキングドラフトへ適用されたが、誤った記述の修正であるため、`ranges::to`が追加されたC++23へ遡及して適用される From e80d61ce53299914df13f6b7e8b050ca9e1145f3 Mon Sep 17 00:00:00 2001 From: Akira Takahashi Date: Thu, 27 Aug 2026 16:44:32 +0900 Subject: [PATCH 16/16] =?UTF-8?q?memory=5Forder=20:=20Read-Modify-Write?= =?UTF-8?q?=E6=93=8D=E4=BD=9C=E3=81=8C=E8=AA=AD=E3=81=BF=E5=8F=96=E3=82=8B?= =?UTF-8?q?=E5=80=A4=E3=81=AE=E4=BB=95=E6=A7=98=E3=82=92=E8=A8=98=E8=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- reference/atomic/memory_order.md | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/reference/atomic/memory_order.md b/reference/atomic/memory_order.md index 8d8730bf6d..798b084c09 100644 --- a/reference/atomic/memory_order.md +++ b/reference/atomic/memory_order.md @@ -97,6 +97,12 @@ int main() ## 備考 +### Read-Modify-Write操作が読み取る値 +読み込みと書き込みを同時に行う操作 (Read-Modify-Write操作。[`fetch_add()`](/reference/atomic/atomic/fetch_add.md)や[`compare_exchange_weak()`](/reference/atomic/atomic/compare_exchange_weak.md)など) は、指定したメモリオーダーによらず、対象のアトミックオブジェクトの変更順序において、自身の副作用の直前にある副作用が書き込んだ値を読み取る。 + +これにより、複数のスレッドが同じアトミックオブジェクトに対してRead-Modify-Write操作を行っても、それらが同じ値を読み取ることはない。 + +### `consume`列挙値 非推奨化された`consume`列挙値の挙動はacquire操作と似ているが、それより弱い順序付けでの読み込みを行うことを指示する。acquire操作は後続の全ての操作に対して順序付けを行うのに対し、consume操作は読み込まれた値に依存(ただし条件分岐による依存は除く)する操作のみに順序付けを保証する点が異なる。 複雑なconsume操作を正しく実装するC++コンパイラは登場せず、より単純なacquire操作として扱われていた。C++20では仕様再検討に伴う一時的な利用回避が宣言され、最終的には役に立たないとの判断からC++26で非推奨となった。 @@ -125,3 +131,5 @@ int main() - [P0371R1 Temporarily discourage `memory_order_consume`](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/p0371r1.html) - [P3475R2 Defang and deprecate memory_order::consume](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3475r2.pdf) - C++26で`memory_order::consume`列挙子を非推奨化。 +- [LWG Issue 4521. Improve [atomics.order] p10 to have a consistent way with [intro.races]](https://cplusplus.github.io/LWG/issue4521) + - Read-Modify-Write操作が読み取る値の規定が、「変更順序において書き込みより前に書かれた最後の値」から「Read-Modify-Write操作の副作用の直前の副作用による値」という表現へ改められた。メモリモデルのほかの箇所と用語を揃えるためであり、規格としてはC++29のワーキングドラフトへ適用されたが、文言の明確化であるためC++11へ遡及して適用される