From 7432d763f1f8fbb6a5b7e637755760b6a5368e14 Mon Sep 17 00:00:00 2001 From: Akira Takahashi Date: Mon, 17 Aug 2026 16:09:27 +0900 Subject: [PATCH 01/25] =?UTF-8?q?fexcept=5Ft=20:=20=E3=82=AA=E3=83=96?= =?UTF-8?q?=E3=82=B8=E3=82=A7=E3=82=AF=E3=83=88=E5=9E=8B=E3=81=A7=E3=81=82?= =?UTF-8?q?=E3=82=8B=E3=81=93=E3=81=A8=E3=82=92=E6=98=8E=E7=A2=BA=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- reference/cfenv/fexcept_t.md | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/reference/cfenv/fexcept_t.md b/reference/cfenv/fexcept_t.md index bb8811206c..8617873402 100644 --- a/reference/cfenv/fexcept_t.md +++ b/reference/cfenv/fexcept_t.md @@ -14,6 +14,8 @@ namespace std { ## 概要 実装が持つ浮動小数点例外の状態フラグを表す型。 +この型はオブジェクト型であり、整数型であるとは限らない。 + ## 例 ```cpp example @@ -58,3 +60,8 @@ zero divided - [ICC](/implementation.md#icc): ?? - [Visual C++](/implementation.md#visual_cpp): 2013 [mark verified], 2015 [mark verified] - コンパイルオプション`/fp:strict`または`#pragma fenv_access (on)`が必要。さもなくば、正しく動作しないおそれがある。 + + +## 参照 +- [LWG Issue 3905. Type of `std::fexcept_t`](https://cplusplus.github.io/LWG/issue3905) + - C++26で、`fexcept_t`が「整数型」ではなく「オブジェクト型」であることが明確化された From 177bbb0937f1591d3fbbf532610fe438be849662 Mon Sep 17 00:00:00 2001 From: Akira Takahashi Date: Mon, 17 Aug 2026 16:09:42 +0900 Subject: [PATCH 02/25] =?UTF-8?q?complex::operator=3D=20:=20LWG=20Issue?= =?UTF-8?q?=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/complex/complex/op_assign.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/reference/complex/complex/op_assign.md b/reference/complex/complex/op_assign.md index 3546ddb68d..b1cbc4e201 100644 --- a/reference/complex/complex/op_assign.md +++ b/reference/complex/complex/op_assign.md @@ -80,3 +80,5 @@ c = (7,0), d = (2,3) ## 参照 - [P0415R1 Constexpr for `std::complex`](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2017/p0415r1.html) +- [LWG Issue 3935. `template constexpr complex& operator=(const complex&)` has no specification](https://cplusplus.github.io/LWG/issue3935) + - C++26で、別の要素型をもつ複素数からの変換コピー代入演算子(3)の効果と戻り値が規定された From cf04ede374d4f9daab357471953b08f3984b31e5 Mon Sep 17 00:00:00 2001 From: Akira Takahashi Date: Mon, 17 Aug 2026 16:10:42 +0900 Subject: [PATCH 03/25] =?UTF-8?q?expected=E3=81=AE=E3=83=A2=E3=83=8A?= =?UTF-8?q?=E3=83=87=E3=82=A3=E3=83=83=E3=82=AF=E6=93=8D=E4=BD=9C=20:=20?= =?UTF-8?q?=E5=8A=B9=E6=9E=9C=E3=81=A8=E9=81=A9=E6=A0=BC=E8=A6=81=E4=BB=B6?= =?UTF-8?q?=E3=81=A7=E3=81=AE=E6=AD=A3=E5=B8=B8=E5=80=A4=E3=81=B8=E3=81=AE?= =?UTF-8?q?=E3=82=A2=E3=82=AF=E3=82=BB=E3=82=B9=E3=81=AB`**this`=E3=81=8C?= =?UTF-8?q?=E4=BD=BF=E3=82=8F=E3=82=8C=E3=82=8B=E3=82=88=E3=81=86=E4=BB=95?= =?UTF-8?q?=E6=A7=98=E5=A4=89=E6=9B=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- reference/expected/expected/and_then.md | 14 ++++++++------ reference/expected/expected/or_else.md | 10 ++++++---- reference/expected/expected/transform.md | 18 ++++++++++-------- reference/expected/expected/transform_error.md | 6 ++++-- 4 files changed, 28 insertions(+), 20 deletions(-) diff --git a/reference/expected/expected/and_then.md b/reference/expected/expected/and_then.md index 6545fdbe49..30953f9c47 100644 --- a/reference/expected/expected/and_then.md +++ b/reference/expected/expected/and_then.md @@ -35,10 +35,10 @@ class expected { ## 適格要件 -- (1), (2) : 型`U`を[`remove_cvref_t`](/reference/type_traits/remove_cvref.md)`<`[`invoke_result_t`](/reference/type_traits/invoke_result.md)`>`としたとき、次を全て満たすこと +- (1), (2) : 型`U`を[`remove_cvref_t`](/reference/type_traits/remove_cvref.md)`<`[`invoke_result_t`](/reference/type_traits/invoke_result.md)`>`としたとき、次を全て満たすこと - `U`が`expected`の特殊化である - [`is_same_v`](/reference/type_traits/is_same.md)` == true` -- (3), (4) : 型`U`を[`remove_cvref_t`](/reference/type_traits/remove_cvref.md)`<`[`invoke_result_t`](/reference/type_traits/invoke_result.md)`>`としたとき、次を全て満たすこと +- (3), (4) : 型`U`を[`remove_cvref_t`](/reference/type_traits/remove_cvref.md)`<`[`invoke_result_t`](/reference/type_traits/invoke_result.md)`>`としたとき、次を全て満たすこと - `U`が`expected`の特殊化である - [`is_same_v`](/reference/type_traits/is_same.md)` == true` @@ -47,12 +47,12 @@ class expected { - (1), (2) : 次の処理と等価 ```cpp if (has_value()) - return invoke(std::forward(f), value()); + return invoke(std::forward(f), **this); else return U(unexpect, error()); ``` * has_value[link has_value.md] - * value()[link value.md] + * **this[link op_deref.md] * error()[link error.md] * unexpect[link ../unexpect_t.md] * invoke[link /reference/functional/invoke.md] @@ -60,12 +60,12 @@ class expected { - (3), (4) : 次の処理と等価 ```cpp if (has_value()) - return invoke(std::forward(f), std::move(value())); + return invoke(std::forward(f), std::move(**this)); else return U(unexpect, std::move(error())); ``` * has_value[link has_value.md] - * value()[link value.md] + * **this[link op_deref.md] * error()[link error.md] * unexpect[link ../unexpect_t.md] * invoke[link /reference/functional/invoke.md] @@ -133,3 +133,5 @@ int main() ## 参照 - [P2505R5 Monadic Functions for `std::expected`](https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2022/p2505r5.html) +- [LWG Issue 3938. Cannot use `std::expected` monadic ops with move-only `error_type`](https://cplusplus.github.io/LWG/issue3938) + - C++26で、効果および適格要件で正常値へのアクセスに[`value()`](value.md)ではなく[`**this`](op_deref.md)を使うよう修正され、ムーブのみ可能な`error_type`でも使用できるようになった diff --git a/reference/expected/expected/or_else.md b/reference/expected/expected/or_else.md index b1b2932431..57df61de64 100644 --- a/reference/expected/expected/or_else.md +++ b/reference/expected/expected/or_else.md @@ -47,24 +47,24 @@ class expected { - (1), (2) : 次の処理と等価 ```cpp if (has_value()) - return G(in_place, value()); + return G(in_place, **this); else return invoke(std::forward(f), error()); ``` * has_value()[link has_value.md] - * value()[link value.md] + * **this[link op_deref.md] * error()[link error.md] * invoke[link /reference/functional/invoke.md] - (3), (4) : 次の処理と等価 ```cpp if (has_value()) - return G(in_place, std::move(value())); + return G(in_place, std::move(**this)); else return invoke(std::forward(f), std::move(error())); ``` * has_value()[link has_value.md] - * value()[link value.md] + * **this[link op_deref.md] * error()[link error.md] * invoke[link /reference/functional/invoke.md] * std::move[link /reference/utility/move.md] @@ -137,3 +137,5 @@ int main() ## 参照 - [P2505R5 Monadic Functions for `std::expected`](https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2022/p2505r5.html) +- [LWG Issue 3938. Cannot use `std::expected` monadic ops with move-only `error_type`](https://cplusplus.github.io/LWG/issue3938) + - C++26で、効果で正常値へのアクセスに[`value()`](value.md)ではなく[`**this`](op_deref.md)を使うよう修正され、ムーブのみ可能な`error_type`でも使用できるようになった diff --git a/reference/expected/expected/transform.md b/reference/expected/expected/transform.md index 1905d5ceb5..27b23a9418 100644 --- a/reference/expected/expected/transform.md +++ b/reference/expected/expected/transform.md @@ -35,23 +35,23 @@ class expected { ## 適格要件 -- (1), (2) : 型`U`を[`remove_cvref_t`](/reference/type_traits/remove_cvref.md)`<`[`invoke_result_t`](/reference/type_traits/invoke_result.md)`>`としたとき、次を全て満たすこと +- (1), (2) : 型`U`を[`remove_cvref_t`](/reference/type_traits/remove_cvref.md)`<`[`invoke_result_t`](/reference/type_traits/invoke_result.md)`>`としたとき、次を全て満たすこと - `U`が`expected`の有効な正常値型である - - `U`が(CV修飾された)`void`ではないとき、宣言`U u(`[`invoke`](/reference/functional/invoke.md)`(`[`std::forward`](/reference/utility/forward.md)`(f),` [`value()`](value.md)`));`が妥当である -- (3), (4) : 型`U`を[`remove_cvref_t`](/reference/type_traits/remove_cvref.md)`<`[`invoke_result_t`](/reference/type_traits/invoke_result.md)`>`としたとき、次を全て満たすこと + - `U`が(CV修飾された)`void`ではないとき、宣言`U u(`[`invoke`](/reference/functional/invoke.md)`(`[`std::forward`](/reference/utility/forward.md)`(f),` [`**this`](op_deref.md)`));`が妥当である +- (3), (4) : 型`U`を[`remove_cvref_t`](/reference/type_traits/remove_cvref.md)`<`[`invoke_result_t`](/reference/type_traits/invoke_result.md)`>`としたとき、次を全て満たすこと - `U`が`expected`の有効な正常値型である - - `U`が(CV修飾された)`void`ではないとき、宣言`U u(`[`invoke`](/reference/functional/invoke.md)`(`[`std::forward`](/reference/utility/forward.md)`(f),` [`std::move`](/reference/utility/move.md)`(`[`value()`](value.md)`)));`が妥当である + - `U`が(CV修飾された)`void`ではないとき、宣言`U u(`[`invoke`](/reference/functional/invoke.md)`(`[`std::forward`](/reference/utility/forward.md)`(f),` [`std::move`](/reference/utility/move.md)`(`[`**this`](op_deref.md)`)));`が妥当である ## 効果 - (1), (2) : 次の効果をもつ - エラー値を保持していたら、`expected(`[`unexpect`](../unexpect_t.md)`,` [`error()`](error.md)`)`を返す。 - - 型`U`が(CV修飾された)`void`でなければ、正常値を[`invoke`](/reference/functional/invoke.md)`(`[`std::forward`](/reference/utility/forward.md)`(f),` [`value()`](value.md)`)`で直接非リスト初期化した`expected`オブジェクトを返す。 - - そうでなければ、[`invoke`](/reference/functional/invoke.md)`(`[`std::forward`](/reference/utility/forward.md)`(f),` [`value()`](value.md)`)`を評価し、`expected()`を返す。 + - 型`U`が(CV修飾された)`void`でなければ、正常値を[`invoke`](/reference/functional/invoke.md)`(`[`std::forward`](/reference/utility/forward.md)`(f),` [`**this`](op_deref.md)`)`で直接非リスト初期化した`expected`オブジェクトを返す。 + - そうでなければ、[`invoke`](/reference/functional/invoke.md)`(`[`std::forward`](/reference/utility/forward.md)`(f),` [`**this`](op_deref.md)`)`を評価し、`expected()`を返す。 - (3), (4) : 次の効果をもつ - エラー値を保持していたら、`expected(`[`unexpect`](../unexpect_t.md)`,` [`std::move`](/reference/utility/move.md)`(`[`error()`](error.md)`))`を返す。 - - 型`U`が(CV修飾された)`void`でなければ、正常値を[`invoke`](/reference/functional/invoke.md)`(`[`std::forward`](/reference/utility/forward.md)`(f),` [`std::move`](/reference/utility/move.md)`(`[`value()`](value.md)`))`で直接非リスト初期化した`expected`オブジェクトを返す。 - - そうでなければ、[`invoke`](/reference/functional/invoke.md)`(`[`std::forward`](/reference/utility/forward.md)`(f),` [`std::move`](/reference/utility/move.md)`(`[`value()`](value.md)`))`を評価し、`expected()`を返す。 + - 型`U`が(CV修飾された)`void`でなければ、正常値を[`invoke`](/reference/functional/invoke.md)`(`[`std::forward`](/reference/utility/forward.md)`(f),` [`std::move`](/reference/utility/move.md)`(`[`**this`](op_deref.md)`))`で直接非リスト初期化した`expected`オブジェクトを返す。 + - そうでなければ、[`invoke`](/reference/functional/invoke.md)`(`[`std::forward`](/reference/utility/forward.md)`(f),` [`std::move`](/reference/utility/move.md)`(`[`**this`](op_deref.md)`))`を評価し、`expected()`を返す。 ## 備考 @@ -112,3 +112,5 @@ int main() ## 参照 - [P2505R5 Monadic Functions for `std::expected`](https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2022/p2505r5.html) +- [LWG Issue 3938. Cannot use `std::expected` monadic ops with move-only `error_type`](https://cplusplus.github.io/LWG/issue3938) + - C++26で、効果および適格要件で正常値へのアクセスに[`value()`](value.md)ではなく[`**this`](op_deref.md)を使うよう修正され、ムーブのみ可能な`error_type`でも使用できるようになった diff --git a/reference/expected/expected/transform_error.md b/reference/expected/expected/transform_error.md index 881c7c9e52..4ef51c71a5 100644 --- a/reference/expected/expected/transform_error.md +++ b/reference/expected/expected/transform_error.md @@ -45,10 +45,10 @@ class expected { ## 効果 - (1), (2) : 次の効果をもつ - - 正常値を保持していたら、`expected(`[`in_place`](/reference/utility/in_place_t.md)`,` [`value()`](value.md)`)`を返す。 + - 正常値を保持していたら、`expected(`[`in_place`](/reference/utility/in_place_t.md)`,` [`**this`](op_deref.md)`)`を返す。 - そうでなければ、エラー値を[`invoke`](/reference/functional/invoke.md)`(`[`std::forward`](/reference/utility/forward.md)`(f),` [`error()`](error.md)`)`で直接非リスト初期化した`expected`オブジェクトを返す。 - (3), (4) : 次の効果をもつ - - 正常値を保持していたら、`expected(`[`in_place`](/reference/utility/in_place_t.md)`,` [`std::move`](/reference/utility/move.md)`(`[`value()`](value.md)`))`を返す。 + - 正常値を保持していたら、`expected(`[`in_place`](/reference/utility/in_place_t.md)`,` [`std::move`](/reference/utility/move.md)`(`[`**this`](op_deref.md)`))`を返す。 - そうでなければ、エラー値を[`invoke`](/reference/functional/invoke.md)`(`[`std::forward`](/reference/utility/forward.md)`(f),` [`std::move`](/reference/utility/move.md)`(`[`error()`](error.md)`))`で直接非リスト初期化した`expected`オブジェクトを返す。 @@ -109,3 +109,5 @@ int main() ## 参照 - [P2505R5 Monadic Functions for `std::expected`](https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2022/p2505r5.html) +- [LWG Issue 3938. Cannot use `std::expected` monadic ops with move-only `error_type`](https://cplusplus.github.io/LWG/issue3938) + - C++26で、効果で正常値へのアクセスに[`value()`](value.md)ではなく[`**this`](op_deref.md)を使うよう修正され、ムーブのみ可能な`error_type`でも使用できるようになった From 14d1f9f3c461391d5aa9d527432b69b9249096f7 Mon Sep 17 00:00:00 2001 From: Akira Takahashi Date: Mon, 17 Aug 2026 16:11:05 +0900 Subject: [PATCH 04/25] =?UTF-8?q?expected.void=E3=81=AE=E4=BB=A3=E5=85=A5?= =?UTF-8?q?=E6=BC=94=E7=AE=97=E5=AD=90=20:=20=E9=81=A9=E6=A0=BC=E8=A6=81?= =?UTF-8?q?=E4=BB=B6=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/expected/expected.void/op_assign.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/reference/expected/expected.void/op_assign.md b/reference/expected/expected.void/op_assign.md index a2d6559dc4..2af1b358e7 100644 --- a/reference/expected/expected.void/op_assign.md +++ b/reference/expected/expected.void/op_assign.md @@ -33,6 +33,9 @@ constexpr expected& operator=(unexpected&& e); // (4) ## テンプレートパラメータ制約 +- (2) : 次の制約を全て満たすこと + - [`is_move_constructible_v`](/reference/type_traits/is_move_constructible.md)` == true` + - [`is_move_assignable_v`](/reference/type_traits/is_move_assignable.md)` == true` - (3) : 次の制約を全て満たすこと - [`is_constructible_v`](/reference/type_traits/is_constructible.md)` == true` - [`is_assignable_v`](/reference/type_traits/is_assignable.md)` == true` @@ -175,5 +178,7 @@ int main() ## 参照 - [P0323R12 std::expected](https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2022/p0323r12.html) +- [LWG Issue 4025. Move assignment operator of `std::expected` should not be conditionally deleted](https://cplusplus.github.io/LWG/issue4025) + - C++26で、ムーブ代入演算子(2)が条件付きでdelete定義されるのではなく、テンプレートパラメータ制約によってオーバーロード解決から除外されるよう修正された - [LWG Issue 4026. Assignment operators of `std::expected` should propagate triviality](https://cplusplus.github.io/LWG/issue4026) - C++26で、`E`が対応する操作をトリビアルに持つ場合に、コピー代入演算子(1)とムーブ代入演算子(2)もトリビアルに定義されるようになった From 6c808d4a28dd422d2535401413ec7328eaf29205 Mon Sep 17 00:00:00 2001 From: Akira Takahashi Date: Mon, 17 Aug 2026 16:11:29 +0900 Subject: [PATCH 05/25] =?UTF-8?q?expected.void=E3=81=AEvalue=20:=20?= =?UTF-8?q?=E9=81=A9=E6=A0=BC=E8=A6=81=E4=BB=B6=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/expected/expected.void/value.md | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/reference/expected/expected.void/value.md b/reference/expected/expected.void/value.md index 01fb8a2d4e..559a91c802 100644 --- a/reference/expected/expected.void/value.md +++ b/reference/expected/expected.void/value.md @@ -15,6 +15,11 @@ constexpr void value() &&; // (2) 正常値(`void`)を取得する。 +## 適格要件 +- (1) : [`is_copy_constructible_v`](/reference/type_traits/is_copy_constructible.md)` == true`であること +- (2) : [`is_copy_constructible_v`](/reference/type_traits/is_copy_constructible.md)` == true`かつ[`is_move_constructible_v`](/reference/type_traits/is_move_constructible.md)` == true`であること + + ## 戻り値 なし @@ -74,3 +79,5 @@ throw:42 ## 参照 - [P0323R12 std::expected](https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2022/p0323r12.html) +- [LWG Issue 3940. `std::expected::value()` also needs `E` to be copy constructible](https://cplusplus.github.io/LWG/issue3940) + - C++26で、(1)に`E`がコピー構築可能であること、(2)に`E`がコピー構築可能かつムーブ構築可能であることを要求する適格要件が追加された From ac785fa5ab9779e2d89b85e2cb94833604a74154 Mon Sep 17 00:00:00 2001 From: Akira Takahashi Date: Mon, 17 Aug 2026 16:11:46 +0900 Subject: [PATCH 06/25] =?UTF-8?q?flat=5Fmap,=20flat=5Fset=20:=20LWG=20Issu?= =?UTF-8?q?e=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/flat_map/flat_map/op_constructor.md | 2 ++ reference/flat_map/flat_multimap/op_constructor.md | 2 ++ reference/flat_set/flat_multiset/op_constructor.md | 2 ++ reference/flat_set/flat_set/op_constructor.md | 2 ++ 4 files changed, 8 insertions(+) diff --git a/reference/flat_map/flat_map/op_constructor.md b/reference/flat_map/flat_map/op_constructor.md index dd72636453..74383717e8 100644 --- a/reference/flat_map/flat_map/op_constructor.md +++ b/reference/flat_map/flat_map/op_constructor.md @@ -451,4 +451,6 @@ int main() ## 参照 +- [LWG Issue 3884. `flat_foo` is missing allocator-extended copy/move constructors](https://cplusplus.github.io/LWG/issue3884) + - C++26で、`flat_map`にアロケータを指定するコピーコンストラクタ(5)とムーブコンストラクタ(6)が追加された - [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/flat_map/flat_multimap/op_constructor.md b/reference/flat_map/flat_multimap/op_constructor.md index 7878661de9..57c8e8be15 100644 --- a/reference/flat_map/flat_multimap/op_constructor.md +++ b/reference/flat_map/flat_multimap/op_constructor.md @@ -447,4 +447,6 @@ int main() ## 参照 +- [LWG Issue 3884. `flat_foo` is missing allocator-extended copy/move constructors](https://cplusplus.github.io/LWG/issue3884) + - C++26で、`flat_multimap`にアロケータを指定するコピーコンストラクタ(5)とムーブコンストラクタ(6)が追加された - [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/flat_set/flat_multiset/op_constructor.md b/reference/flat_set/flat_multiset/op_constructor.md index 5dfcbaf9f2..99c75ca064 100644 --- a/reference/flat_set/flat_multiset/op_constructor.md +++ b/reference/flat_set/flat_multiset/op_constructor.md @@ -432,4 +432,6 @@ int main() ## 参照 +- [LWG Issue 3884. `flat_foo` is missing allocator-extended copy/move constructors](https://cplusplus.github.io/LWG/issue3884) + - C++26で、`flat_multiset`にアロケータを指定するコピーコンストラクタ(5)とムーブコンストラクタ(6)が追加された - [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/flat_set/flat_set/op_constructor.md b/reference/flat_set/flat_set/op_constructor.md index f2581bf9ed..8560dda659 100644 --- a/reference/flat_set/flat_set/op_constructor.md +++ b/reference/flat_set/flat_set/op_constructor.md @@ -433,4 +433,6 @@ int main() ## 参照 +- [LWG Issue 3884. `flat_foo` is missing allocator-extended copy/move constructors](https://cplusplus.github.io/LWG/issue3884) + - C++26で、`flat_set`にアロケータを指定するコピーコンストラクタ(5)とムーブコンストラクタ(6)が追加された - [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) From fc253b65437a66c20d9328566b5c04fde582313a Mon Sep 17 00:00:00 2001 From: Akira Takahashi Date: Mon, 17 Aug 2026 16:12:32 +0900 Subject: [PATCH 07/25] =?UTF-8?q?basic=5Fformat=5F(parse=5F)context=20:=20?= =?UTF-8?q?=E3=83=A6=E3=83=BC=E3=82=B6=E3=83=BC=E3=81=AB=E3=82=88=E3=82=8B?= =?UTF-8?q?=E7=89=B9=E6=AE=8A=E5=8C=96=E3=82=92=E7=A6=81=E6=AD=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- reference/format/basic_format_context.md | 4 ++++ reference/format/basic_format_parse_context.md | 7 +++++++ 2 files changed, 11 insertions(+) diff --git a/reference/format/basic_format_context.md b/reference/format/basic_format_context.md index c389875655..be7ec46674 100644 --- a/reference/format/basic_format_context.md +++ b/reference/format/basic_format_context.md @@ -33,6 +33,8 @@ namespace std { C++26では、コピーコンストラクタとコピー代入演算子が`= delete`で明示的に削除され、このクラスがコピー構築・コピー代入できないことが明確化された(これにともないムーブおよびデフォルト構築もできない)。 +また、このクラステンプレートの明示的特殊化または部分特殊化をユーザーが宣言した場合、プログラムは不適格となる(診断不要)。 + ## メンバ関数 | 名前 | 説明 | 対応バージョン | @@ -106,5 +108,7 @@ namespace std { ## 参照 * [P0645R10 Text Formatting](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2019/p0645r10.html) +* [LWG Issue 3975. Specializations of `basic_format_context` should not be permitted](https://cplusplus.github.io/LWG/issue3975) + * C++26で、ユーザーによる明示的特殊化・部分特殊化が不適格(診断不要)とされた * [LWG Issue 4061. Should `std::basic_format_context` be default-constructible/copyable/movable?](https://cplusplus.github.io/LWG/issue4061) * C++26で、コピーコンストラクタとコピー代入演算子が`= delete`で明示的に削除され、コピー・ムーブ・デフォルト構築ができないことが明確化された diff --git a/reference/format/basic_format_parse_context.md b/reference/format/basic_format_parse_context.md index 73a717a3f3..07e263dd29 100644 --- a/reference/format/basic_format_parse_context.md +++ b/reference/format/basic_format_parse_context.md @@ -24,6 +24,11 @@ namespace std { このクラスのオブジェクトはコピーできない。 + +## 備考 +このクラステンプレートの明示的特殊化または部分特殊化をユーザーが宣言した場合、プログラムは不適格となる(診断不要)。 + + ## メンバ関数 | 名前 | 説明 | 対応バージョン | @@ -143,3 +148,5 @@ namespace std { * [P0645R10 Text Formatting](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2019/p0645r10.html) * [P2757R3 Type-checking format args](https://open-std.org/jtc1/sc22/wg21/docs/papers/2023/p2757r3.html) +* [LWG Issue 3975. Specializations of `basic_format_context` should not be permitted](https://cplusplus.github.io/LWG/issue3975) + * C++26で、`basic_format_parse_context`についてもユーザーによる明示的特殊化・部分特殊化が不適格(診断不要)とされた From a6903d0533d557b4b11620f67af20b9042156019 Mon Sep 17 00:00:00 2001 From: Akira Takahashi Date: Mon, 17 Aug 2026 16:13:00 +0900 Subject: [PATCH 08/25] =?UTF-8?q?formattable=20:=20=E3=83=86=E3=83=B3?= =?UTF-8?q?=E3=83=97=E3=83=AC=E3=83=BC=E3=83=88=E5=BC=95=E6=95=B0=E3=81=AE?= =?UTF-8?q?=E8=AA=A4=E3=82=8A=E3=82=92=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- reference/format/formattable.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/reference/format/formattable.md b/reference/format/formattable.md index e4ea4fb047..f3424039ae 100644 --- a/reference/format/formattable.md +++ b/reference/format/formattable.md @@ -23,7 +23,7 @@ namespace std { template concept formattable = - formattable-with, basic_format_context>>; + formattable-with, basic_format_context, charT>>; } ``` * fmt-iter-for[italic] @@ -79,3 +79,5 @@ hello ## 参照 - [P2286R8 Formatting Ranges](https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2022/p2286r8.html) - [N4950 22.14.6.2 Concept formattable](https://timsong-cpp.github.io/cppwp/n4950/format.formattable#concept:formattable-with) +- [LWG Issue 3925. Concept `formattable`'s definition is incorrect](https://cplusplus.github.io/LWG/issue3925) + - C++26で、`basic_format_context`のテンプレート引数に文字型`charT`が欠けていた誤りが修正された From bafcd89c179568d9d127d2cf0c40e10bfa58898f Mon Sep 17 00:00:00 2001 From: Akira Takahashi Date: Mon, 17 Aug 2026 16:13:20 +0900 Subject: [PATCH 09/25] =?UTF-8?q?generator::promise=5Ftype::yield=5Fvalue?= =?UTF-8?q?=20:=20noexcept=E5=89=8A=E9=99=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- reference/generator/generator/promise_type/yield_value.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/reference/generator/generator/promise_type/yield_value.md b/reference/generator/generator/promise_type/yield_value.md index ed30b7ffcf..573079d502 100644 --- a/reference/generator/generator/promise_type/yield_value.md +++ b/reference/generator/generator/promise_type/yield_value.md @@ -18,7 +18,7 @@ auto yield_value(ranges::elements_of&&, Unused> g) noe template requires convertible_to, yielded> -auto yield_value(ranges::elements_of r) noexcept; // (4) +auto yield_value(ranges::elements_of r); // (4) ``` * generator[link ../../generator.md] * yielded[link ../../generator.md] @@ -107,6 +107,8 @@ return yield_value(ranges::elements_of(nested( ## 参照 +- [LWG Issue 3894. `generator::promise_type::yield_value(ranges::elements_of)` should not be `noexcept`](https://cplusplus.github.io/LWG/issue3894) + - C++26で、(4)から`noexcept`が削除された(効果内で例外を送出しうる`generator`の構築を行うため) - [LWG Issue 3899. co_yielding elements of an lvalue generator is unnecessarily inefficient](https://cplusplus.github.io/LWG/issue3899) - C++26で、(4)の効果で用いるネストした`generator`の型を`generator`に変更し、左辺値`generator`の要素をco_yieldする際の非効率を解消した - [LWG Issue 4119. `generator::promise_type::yield_value(ranges::elements_of)`'s nested generator may be ill-formed](https://cplusplus.github.io/LWG/issue4119) From 4eefe31c87ea9c5467937bae940558c534a5526d Mon Sep 17 00:00:00 2001 From: Akira Takahashi Date: Mon, 17 Aug 2026 16:13:41 +0900 Subject: [PATCH 10/25] =?UTF-8?q?locale=E3=81=AEctype=5Fbase=20:=20constex?= =?UTF-8?q?pr=E5=AF=BE=E5=BF=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- reference/locale/ctype_base.md | 32 +++++++++++++++++--------------- 1 file changed, 17 insertions(+), 15 deletions(-) diff --git a/reference/locale/ctype_base.md b/reference/locale/ctype_base.md index bae7e44852..646d55b09f 100644 --- a/reference/locale/ctype_base.md +++ b/reference/locale/ctype_base.md @@ -20,20 +20,20 @@ namespace std { ### メンバ定数 -| 名前 | 説明 | -|-------------------------------------------------------|-----------------------------------| -| `static const mask space = 1 << 0;` | 空白類文字のマスク値 | -| `static const mask print = 1 << 1;` | 印字可能文字のマスク値 | -| `static const mask cntrl = 1 << 2;` | 制御文字のマスク値 | -| `static const mask upper = 1 << 3;` | 英大文字のマスク値 | -| `static const mask lower = 1 << 4;` | 英小文字のマスク値 | -| `static const mask alpha = 1 << 5;` | 英字のマスク値 | -| `static const mask digit = 1 << 6;` | 数字のマスク値 | -| `static const mask punct = 1 << 7;` | 区切り文字のマスク値 | -| `static const mask xdigit = 1 << 8;` | 十六進数字のマスク値 | -| `static const mask blank = 1 << 9;` | ブランク文字のマスク値 | -| static const mask alnum = alpha | digit; | 英字・数字のマスク値 | -| static const mask graph = alnum | punct; | 図形文字のマスク値 | +| 名前 | 説明 | 対応バージョン | +|-------------------------------------------------------|-----------------------------------|-------| +| `static const mask space = 1 << 0;`
`static constexpr mask space = 1 << 0;` | 空白類文字のマスク値 | C++98
C++26 | +| `static const mask print = 1 << 1;`
`static constexpr mask print = 1 << 1;` | 印字可能文字のマスク値 | C++98
C++26 | +| `static const mask cntrl = 1 << 2;`
`static constexpr mask cntrl = 1 << 2;` | 制御文字のマスク値 | C++98
C++26 | +| `static const mask upper = 1 << 3;`
`static constexpr mask upper = 1 << 3;` | 英大文字のマスク値 | C++98
C++26 | +| `static const mask lower = 1 << 4;`
`static constexpr mask lower = 1 << 4;` | 英小文字のマスク値 | C++98
C++26 | +| `static const mask alpha = 1 << 5;`
`static constexpr mask alpha = 1 << 5;` | 英字のマスク値 | C++98
C++26 | +| `static const mask digit = 1 << 6;`
`static constexpr mask digit = 1 << 6;` | 数字のマスク値 | C++98
C++26 | +| `static const mask punct = 1 << 7;`
`static constexpr mask punct = 1 << 7;` | 区切り文字のマスク値 | C++98
C++26 | +| `static const mask xdigit = 1 << 8;`
`static constexpr mask xdigit = 1 << 8;` | 十六進数字のマスク値 | C++98
C++26 | +| `static const mask blank = 1 << 9;`
`static constexpr mask blank = 1 << 9;` | ブランク文字のマスク値 | C++11
C++26 | +| static const mask alnum = alpha | digit;
static constexpr mask alnum = alpha | digit; | 英字・数字のマスク値 | C++98
C++26 | +| static const mask graph = alnum | punct;
static constexpr mask graph = alnum | punct; | 図形文字のマスク値 | C++98
C++26 | ## 例 @@ -44,4 +44,6 @@ namespace std { ``` ``` -### 参照 +## 参照 +- [LWG Issue 4037. Static data members of `ctype_base` are not yet required to be usable in constant expressions](https://cplusplus.github.io/LWG/issue4037) + - C++26で、各メンバ定数が`static const`から`static constexpr`に変更され、定数式で使用できることが規定された From 39c6fa535335891bc30cef145929ee793afe3d82 Mon Sep 17 00:00:00 2001 From: Akira Takahashi Date: Mon, 17 Aug 2026 16:13:57 +0900 Subject: [PATCH 11/25] =?UTF-8?q?=E9=A3=BD=E5=92=8C=E6=BC=94=E7=AE=97=20:?= =?UTF-8?q?=20LWG=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/numeric/saturating_add.md | 2 ++ reference/numeric/saturating_div.md | 2 ++ reference/numeric/saturating_mul.md | 2 ++ reference/numeric/saturating_sub.md | 2 ++ 4 files changed, 8 insertions(+) diff --git a/reference/numeric/saturating_add.md b/reference/numeric/saturating_add.md index 59816fe22d..ea017c982f 100644 --- a/reference/numeric/saturating_add.md +++ b/reference/numeric/saturating_add.md @@ -71,4 +71,6 @@ int main() ## 参照 - [P0543R3 Saturation arithmetic](https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2023/p0543r3.html) +- [LWG Issue 4030. Clarify whether arithmetic expressions in [numeric.sat.func] are mathematical or C++](https://cplusplus.github.io/LWG/issue4030) + - C++26で、飽和演算関数の算術演算が無限精度の数学的演算として行われることが明確化された(cpprefjpでは既に「無限の範囲で計算した値」と記述している) - [P4052R0 Renaming saturation arithmetic functions](https://open-std.org/jtc1/sc22/wg21/docs/papers/2026/p4052r0.html) diff --git a/reference/numeric/saturating_div.md b/reference/numeric/saturating_div.md index 3261a600a2..ca1e310777 100644 --- a/reference/numeric/saturating_div.md +++ b/reference/numeric/saturating_div.md @@ -74,4 +74,6 @@ int main() ## 参照 - [P0543R3 Saturation arithmetic](https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2023/p0543r3.html) +- [LWG Issue 4030. Clarify whether arithmetic expressions in [numeric.sat.func] are mathematical or C++](https://cplusplus.github.io/LWG/issue4030) + - C++26で、飽和演算関数の算術演算が無限精度の数学的演算として行われることが明確化された(cpprefjpでは既に「無限の範囲で計算した値」と記述している) - [P4052R0 Renaming saturation arithmetic functions](https://open-std.org/jtc1/sc22/wg21/docs/papers/2026/p4052r0.html) diff --git a/reference/numeric/saturating_mul.md b/reference/numeric/saturating_mul.md index 90d1f6bc4a..d23756f52e 100644 --- a/reference/numeric/saturating_mul.md +++ b/reference/numeric/saturating_mul.md @@ -71,4 +71,6 @@ int main() ## 参照 - [P0543R3 Saturation arithmetic](https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2023/p0543r3.html) +- [LWG Issue 4030. Clarify whether arithmetic expressions in [numeric.sat.func] are mathematical or C++](https://cplusplus.github.io/LWG/issue4030) + - C++26で、飽和演算関数の算術演算が無限精度の数学的演算として行われることが明確化された(cpprefjpでは既に「無限の範囲で計算した値」と記述している) - [P4052R0 Renaming saturation arithmetic functions](https://open-std.org/jtc1/sc22/wg21/docs/papers/2026/p4052r0.html) diff --git a/reference/numeric/saturating_sub.md b/reference/numeric/saturating_sub.md index 4decaa37fb..0a3e957d4a 100644 --- a/reference/numeric/saturating_sub.md +++ b/reference/numeric/saturating_sub.md @@ -70,4 +70,6 @@ int main() ## 参照 - [P0543R3 Saturation arithmetic](https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2023/p0543r3.html) +- [LWG Issue 4030. Clarify whether arithmetic expressions in [numeric.sat.func] are mathematical or C++](https://cplusplus.github.io/LWG/issue4030) + - C++26で、飽和演算関数の算術演算が無限精度の数学的演算として行われることが明確化された(cpprefjpでは既に「無限の範囲で計算した値」と記述している) - [P4052R0 Renaming saturation arithmetic functions](https://open-std.org/jtc1/sc22/wg21/docs/papers/2026/p4052r0.html) From d7d50d751c8e4c233b747e2459e6bd2c8e09ae04 Mon Sep 17 00:00:00 2001 From: Akira Takahashi Date: Mon, 17 Aug 2026 16:14:58 +0900 Subject: [PATCH 12/25] =?UTF-8?q?common=5Fview=E3=81=AEbegin=20/=20end=20:?= =?UTF-8?q?=20=E5=88=B6=E7=B4=84=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/ranges/common_view/begin.md | 6 +++++- reference/ranges/common_view/end.md | 8 ++++++-- 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/reference/ranges/common_view/begin.md b/reference/ranges/common_view/begin.md index e70d880b9e..7467cb6d9f 100644 --- a/reference/ranges/common_view/begin.md +++ b/reference/ranges/common_view/begin.md @@ -6,9 +6,11 @@ * cpp20[meta cpp] ```cpp -constexpr auto begin(); // (1) +constexpr auto begin() + requires (!simple-view); // (1) constexpr auto begin() const requires range; // (2) ``` +* simple-view[link /reference/ranges/simple-view.md] ## 概要 @@ -85,3 +87,5 @@ int main() { ## 参照 - [N4861 24.7.5.1 Overview](https://timsong-cpp.github.io/cppwp/n4861/range.common.view) +- [LWG Issue 4012. `common_view::begin`/`end` are missing the *simple-view* check](https://cplusplus.github.io/LWG/issue4012) + - C++26で、非`const`版に`requires (!simple-view)`制約が追加され、`simple-view`である場合に`const`版と曖昧にならないよう修正された diff --git a/reference/ranges/common_view/end.md b/reference/ranges/common_view/end.md index 23eac3589a..946860e9ee 100644 --- a/reference/ranges/common_view/end.md +++ b/reference/ranges/common_view/end.md @@ -6,10 +6,12 @@ * cpp20[meta cpp] ```cpp -constexpr auto end(); // (1) C++20 +constexpr auto end() + requires (!simple-view); // (1) C++20 constexpr auto end() const - requires range; // (2) C++20 + requires range; // (2) C++20 ``` +* simple-view[link /reference/ranges/simple-view.md] ## 概要 @@ -84,3 +86,5 @@ int main() { ## 参照 - [N4861 24.7.5.1 Overview](https://timsong-cpp.github.io/cppwp/n4861/range.common.view) +- [LWG Issue 4012. `common_view::begin`/`end` are missing the *simple-view* check](https://cplusplus.github.io/LWG/issue4012) + - C++26で、非`const`版に`requires (!simple-view)`制約が追加され、`simple-view`である場合に`const`版と曖昧にならないよう修正された From 324c0998f8fa837c63e4f7a6983adb38bd9c14d6 Mon Sep 17 00:00:00 2001 From: Akira Takahashi Date: Mon, 17 Aug 2026 16:15:56 +0900 Subject: [PATCH 13/25] =?UTF-8?q?enumerate=5Fview=20:=20iterator=E3=82=92?= =?UTF-8?q?=E8=BF=94=E3=81=99=E6=9D=A1=E4=BB=B6=E3=81=ABforward=5Frange?= =?UTF-8?q?=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/ranges/enumerate_view/end.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/reference/ranges/enumerate_view/end.md b/reference/ranges/enumerate_view/end.md index 978540b069..c997c12650 100644 --- a/reference/ranges/enumerate_view/end.md +++ b/reference/ranges/enumerate_view/end.md @@ -19,7 +19,7 @@ constexpr auto end() const ## 効果 -`common_range && sized_range`が`true`の場合: +`common_range && sized_range && forward_range`が`true`の場合: - (1) : `return iterator(ranges::end(base_), ranges::distance(base_));` - (2) : `return iterator(ranges::end(base_), ranges::distance(base_));` @@ -73,3 +73,5 @@ int main() { ## 参照 - [N4950 26.7.23 Enumerate view](https://timsong-cpp.github.io/cppwp/n4950/range.enumerate) +- [LWG Issue 3919. `enumerate_view` may invoke UB for sized common non-forward underlying ranges](https://cplusplus.github.io/LWG/issue3919) + - C++26で、`iterator`を返す条件に`forward_range`が追加され、sizedかつcommonだが非forwardな元Rangeで未定義動作を引き起こす問題が修正された From b6032ecc5b8ed310863dc9eb9026a67d930bc9b0 Mon Sep 17 00:00:00 2001 From: Akira Takahashi Date: Mon, 17 Aug 2026 16:16:15 +0900 Subject: [PATCH 14/25] =?UTF-8?q?repeat=5Fview=E3=81=AE=E6=8E=A8=E8=AB=96?= =?UTF-8?q?=E8=A3=9C=E5=8A=A9=20:=20LWG=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/ranges/repeat_view/op_deduction_guide.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/reference/ranges/repeat_view/op_deduction_guide.md b/reference/ranges/repeat_view/op_deduction_guide.md index ac84c17549..ba5196b56c 100644 --- a/reference/ranges/repeat_view/op_deduction_guide.md +++ b/reference/ranges/repeat_view/op_deduction_guide.md @@ -47,3 +47,8 @@ int main() { - [GCC](/implementation.md#gcc): 13 [mark verified] - [ICC](/implementation.md#icc): ? - [Visual C++](/implementation.md#visual_cpp): 2022 Update 6 [mark verified] + + +## 参照 +- [LWG Issue 4053. Unary call to `std::views::repeat` does not decay the argument](https://cplusplus.github.io/LWG/issue4053) + - C++26で、`Bound`にデフォルトテンプレート引数`unreachable_sentinel_t`とデフォルト引数`Bound()`が追加され、`repeat_view(E)`のように第2引数を省略した推論が可能になった From 2ac0cb7abb0d541cd5ba9dc47248062f9db03123 Mon Sep 17 00:00:00 2001 From: Akira Takahashi Date: Mon, 17 Aug 2026 16:16:33 +0900 Subject: [PATCH 15/25] =?UTF-8?q?single=5Fview=E3=81=AEempty=20:=20LWG=20I?= =?UTF-8?q?ssue=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/ranges/single_view/empty.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/reference/ranges/single_view/empty.md b/reference/ranges/single_view/empty.md index 346a5d2c40..f6f406dfa6 100644 --- a/reference/ranges/single_view/empty.md +++ b/reference/ranges/single_view/empty.md @@ -28,3 +28,8 @@ return false; - [GCC](/implementation.md#gcc): 10.1.0 [mark verified] - [ICC](/implementation.md#icc): ? - [Visual C++](/implementation.md#visual_cpp): 2019 Update 10 [mark verified] + + +## 参照 +- [LWG Issue 4035. `single_view` should provide `empty`](https://cplusplus.github.io/LWG/issue4035) + - C++26で、常に`false`を返す静的メンバ関数`empty`が`single_view`に明示的に追加された(従来は[`view_interface`](../view_interface.md)経由で提供されていた) From bf7b798f30413ed57c973821440807683b3d973e Mon Sep 17 00:00:00 2001 From: Akira Takahashi Date: Mon, 17 Aug 2026 16:17:03 +0900 Subject: [PATCH 16/25] =?UTF-8?q?enumerate=5Fview=20:=20LWG=20Issue?= =?UTF-8?q?=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/ranges/enumerate_view.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/reference/ranges/enumerate_view.md b/reference/ranges/enumerate_view.md index 8554b5dbfe..d3308d50e5 100644 --- a/reference/ranges/enumerate_view.md +++ b/reference/ranges/enumerate_view.md @@ -101,3 +101,5 @@ int main() { ## 参照 - [N4950 26 Ranges library](https://timsong-cpp.github.io/cppwp/n4950/ranges) +- [LWG Issue 3914. Inconsistent `template-head` of `ranges::enumerate_view`](https://cplusplus.github.io/LWG/issue3914) + - C++26で、``のシノプシスにおける`enumerate_view`の`template-head`が、クラス定義(`template requires range-with-movable-references`)と一致するよう修正された From 939cb2d88f9f3e7fb98de2156f262287e15b9e84 Mon Sep 17 00:00:00 2001 From: Akira Takahashi Date: Mon, 17 Aug 2026 16:17:23 +0900 Subject: [PATCH 17/25] =?UTF-8?q?repeat=5Fview=20:=20=E5=8A=B9=E6=9E=9C?= =?UTF-8?q?=E3=81=ABdecay=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/ranges/repeat_view.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/reference/ranges/repeat_view.md b/reference/ranges/repeat_view.md index e20a352bec..b62c1af3d9 100644 --- a/reference/ranges/repeat_view.md +++ b/reference/ranges/repeat_view.md @@ -34,7 +34,7 @@ namespace std::ranges { - (1) `Bound = unreachable_sentinel_t` ではない場合 ## 効果 -- 式`views::repeat(E)`の効果は`repeat_view(E)`と等しい。 +- 式`views::repeat(E)`の効果は`repeat_view<`[`decay_t`](/reference/type_traits/decay.md)`>(E)`と等しい。 - 式`views::repeat(E, F)`の効果は`repeat_view(E, F)`と等しい。 ## メンバ関数 @@ -103,3 +103,5 @@ int main() { ## 参照 - [N4950 26 Ranges library](https://timsong-cpp.github.io/cppwp/n4950/ranges) +- [LWG Issue 4054. Repeating a `repeat_view` should repeat the view](https://cplusplus.github.io/LWG/issue4054) + - C++26で、`views::repeat(E)`の効果が`repeat_view>(E)`に修正され、引数を[`decay_t`](/reference/type_traits/decay.md)で減衰させて要素型を決定するようになった From 1b9c3060223ca5d706f0109d63ece0809d64c686 Mon Sep 17 00:00:00 2001 From: Akira Takahashi Date: Mon, 17 Aug 2026 16:18:53 +0900 Subject: [PATCH 18/25] =?UTF-8?q?ranges::to=20:=20=E5=86=8D=E8=B5=B7?= =?UTF-8?q?=E5=88=86=E5=B2=90=E3=81=A7Range=E3=82=92ref=5Fview=E3=81=A7?= =?UTF-8?q?=E5=8C=85=E3=82=80=E3=82=88=E3=81=86=E5=A4=89=E6=9B=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- reference/ranges/to.md | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/reference/ranges/to.md b/reference/ranges/to.md index 04082a4667..4ac862559b 100644 --- a/reference/ranges/to.md +++ b/reference/ranges/to.md @@ -77,11 +77,12 @@ Rangeの各要素を要素とするコンテナを構築する。 [`input_range`](input_range.md)`<`[`range_reference_t`](range_reference_t.md)`>`である場合: ```cpp -to(r | views::transform([](auto&& elem) { +to(ref_view(r) | views::transform([](auto&& elem) { return to>(std::forward(elem)); }), std::forward(args)...); ``` * views::transform[link transform_view.md] +* ref_view[link ref_view.md] どの条件にもあてはまらない場合、プログラムは不適格である。 @@ -229,3 +230,5 @@ int main() { - [26.5.7.2 ranges::to](https://timsong-cpp.github.io/cppwp/n4950/range.utility.conv.to) - [P2846R6 `reserve_hint`: Eagerly reserving memory for not-quite-sized lazy ranges](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p2846r6.pdf) - C++26で要素数の事前確保に[`ranges::size`](size.md)の代わりに[`ranges::reserve_hint`](reserve_hint.md)を使用するよう変更 +- [LWG Issue 3984. `ranges::to`'s recursion branch may be ill-formed](https://cplusplus.github.io/LWG/issue3984) + - C++26で、再帰分岐において`r`を[`ranges::ref_view`](ref_view.md)で包むよう修正され、`r`がviewでない左辺値rangeの場合に不適格となる問題が解消された From c4d496e46666ce47be347ca3f700cffac6c4908d Mon Sep 17 00:00:00 2001 From: Akira Takahashi Date: Mon, 17 Aug 2026 16:19:19 +0900 Subject: [PATCH 19/25] =?UTF-8?q?ranges::to=20:=20container-insertable?= =?UTF-8?q?=E3=81=AE=E8=A6=81=E4=BB=B6=E3=82=92=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- reference/ranges/to.md | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/reference/ranges/to.md b/reference/ranges/to.md index 4ac862559b..0c43b48b2a 100644 --- a/reference/ranges/to.md +++ b/reference/ranges/to.md @@ -137,12 +137,14 @@ constexpr bool reservable-container = { c.max_size() } -> same_as; // コンテナのサイズ型を返すmax_sizeメンバ関数がある }; -// container-insertable: push_backまたはinsertが使えることを要求するコンセプト +// container-insertable: emplace_back/push_back/emplace/insertのいずれかが使えることを要求するコンセプト template constexpr bool container-insertable = requires(Container& c, Ref&& ref) { - requires (requires { c.push_back(std::forward(ref)); } || - requires { c.insert(c.end(), std::forward(ref)); }); + requires (requires { c.emplace_back(declval()); } || + requires { c.push_back(declval()); } || + requires { c.emplace(c.end(), declval()); } || + requires { c.insert(c.end(), declval()); }); }; // container-inserter: push_backが使えればback_inserter, そうでなければinserterを返す関数 @@ -232,3 +234,5 @@ int main() { - C++26で要素数の事前確保に[`ranges::size`](size.md)の代わりに[`ranges::reserve_hint`](reserve_hint.md)を使用するよう変更 - [LWG Issue 3984. `ranges::to`'s recursion branch may be ill-formed](https://cplusplus.github.io/LWG/issue3984) - 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つを試す形に修正され、実際の挿入処理と一致するようになった From 65fea48ba6efd77362cbdcd432f2e509f26361ec Mon Sep 17 00:00:00 2001 From: Akira Takahashi Date: Mon, 17 Aug 2026 16:19:49 +0900 Subject: [PATCH 20/25] =?UTF-8?q?span=E3=81=AE=E8=A6=81=E7=B4=A0=E3=82=A2?= =?UTF-8?q?=E3=82=AF=E3=82=BB=E3=82=B9=20:=20=E4=BE=8B=E5=A4=96=E3=82=92?= =?UTF-8?q?=E6=8A=95=E3=81=92=E3=81=AA=E3=81=84=E3=81=93=E3=81=A8=E3=82=92?= =?UTF-8?q?=E6=98=8E=E7=A4=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- reference/span/span/back.md | 6 ++++++ reference/span/span/data.md | 5 +++++ reference/span/span/front.md | 6 ++++++ reference/span/span/op_at.md | 6 ++++++ 4 files changed, 23 insertions(+) diff --git a/reference/span/span/back.md b/reference/span/span/back.md index 952b5c83d2..933e11ca29 100644 --- a/reference/span/span/back.md +++ b/reference/span/span/back.md @@ -27,6 +27,10 @@ return *(data() + (size() - 1)); * size()[link size.md] +## 例外 +投げない + + ## 計算量 定数時間 @@ -68,3 +72,5 @@ int main() ## 参照 - [P3471R4 Standard library hardening](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3471r4.html) - [P3878R1 Standard library hardening should not use the 'observe' semantic](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3878r1.html) +- [LWG Issue 4011. "Effects: Equivalent to return" in [span.elem]](https://cplusplus.github.io/LWG/issue4011) + - C++26で、要素アクセス関数の効果記述が「戻り値」として整理され、例外を投げないことが明示された diff --git a/reference/span/span/data.md b/reference/span/span/data.md index 7f54f01c0b..8534cfad5c 100644 --- a/reference/span/span/data.md +++ b/reference/span/span/data.md @@ -57,3 +57,8 @@ int main() - [Clang](/implementation.md#clang): 9.0 [mark verified] - [GCC](/implementation.md#gcc): ?? - [Visual C++](/implementation.md#visual_cpp): ?? + + +## 参照 +- [LWG Issue 4011. "Effects: Equivalent to return" in [span.elem]](https://cplusplus.github.io/LWG/issue4011) + - C++26で、要素アクセス関数の効果記述が「戻り値」として整理され、例外を投げないことが明示された diff --git a/reference/span/span/front.md b/reference/span/span/front.md index b49b7e72d8..3a05f74484 100644 --- a/reference/span/span/front.md +++ b/reference/span/span/front.md @@ -26,6 +26,10 @@ return *data(); * data()[link data.md] +## 例外 +投げない + + ## 計算量 定数時間 @@ -67,3 +71,5 @@ int main() ## 参照 - [P3471R4 Standard library hardening](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3471r4.html) - [P3878R1 Standard library hardening should not use the 'observe' semantic](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3878r1.html) +- [LWG Issue 4011. "Effects: Equivalent to return" in [span.elem]](https://cplusplus.github.io/LWG/issue4011) + - C++26で、要素アクセス関数の効果記述が「戻り値」として整理され、例外を投げないことが明示された diff --git a/reference/span/span/op_at.md b/reference/span/span/op_at.md index b83fa72696..266ecf72a2 100644 --- a/reference/span/span/op_at.md +++ b/reference/span/span/op_at.md @@ -26,6 +26,10 @@ return *(data() + i); * data()[link data.md] +## 例外 +投げない + + ## 計算量 定数時間 @@ -73,3 +77,5 @@ int main() - [P1872R0 `span` should have `size_type`, not `index_type`](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2019/p1872r0.pdf) - [P3471R4 Standard library hardening](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3471r4.html) - [P3878R1 Standard library hardening should not use the 'observe' semantic](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3878r1.html) +- [LWG Issue 4011. "Effects: Equivalent to return" in [span.elem]](https://cplusplus.github.io/LWG/issue4011) + - C++26で、要素アクセス関数の効果記述が「戻り値」として整理され、例外を投げないことが明示された From bf9d7eea13fbeec5b69753ee8d04ac5a81ec587b Mon Sep 17 00:00:00 2001 From: Akira Takahashi Date: Mon, 17 Aug 2026 16:23:15 +0900 Subject: [PATCH 21/25] =?UTF-8?q?span=E3=81=AE=E3=83=87=E3=82=B9=E3=83=88?= =?UTF-8?q?=E3=83=A9=E3=82=AF=E3=82=BF=E3=83=9A=E3=83=BC=E3=82=B8=E3=82=92?= =?UTF-8?q?=E8=BF=BD=E5=8A=A0=E3=81=97=E3=80=81C++26=E3=81=8B=E3=82=89noex?= =?UTF-8?q?cept=E3=82=92=E5=89=8A=E9=99=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- reference/span/span.md | 2 +- reference/span/span/op_destructor.md | 31 ++++++++++++++++++++++++++++ 2 files changed, 32 insertions(+), 1 deletion(-) create mode 100644 reference/span/span/op_destructor.md diff --git a/reference/span/span.md b/reference/span/span.md index f29a439937..d83923410b 100644 --- a/reference/span/span.md +++ b/reference/span/span.md @@ -66,7 +66,7 @@ namespace std { | 名前 | 説明 | 対応バージョン | |------|------|----------------| | [`(constructor)`](span/op_constructor.md) | コンストラクタ | C++20 | -| `~span() = default;` | デストラクタ | C++20 | +| [`(destructor)`](span/op_destructor.md) | デストラクタ | C++20 | | `span& operator=(const span&) = default;`
`span& operator=(span&&) = default;` | 代入演算子 | C++20 | diff --git a/reference/span/span/op_destructor.md b/reference/span/span/op_destructor.md new file mode 100644 index 0000000000..8877ce4f55 --- /dev/null +++ b/reference/span/span/op_destructor.md @@ -0,0 +1,31 @@ +# デストラクタ +* span[meta header] +* std[meta namespace] +* span[meta class] +* function[meta id-type] +* cpp20[meta cpp] + +```cpp +~span() noexcept = default; // (1) C++20 +~span() = default; // (1) C++26 +``` + +## 概要 +`span`オブジェクトを破棄する。 + +`span`は要素列を所有しない(非所有の)ビューであるため、このデストラクタは参照先の要素に対しては何もしない。トリビアルにデフォルト定義される。 + + +## 例外 +投げない + + +## バージョン +### 言語 +- C++20 + + +## 参照 +- [P0122R7 ``](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2018/p0122r7.pdf) +- [LWG Issue 3903. `span` destructor is redundantly `noexcept`](https://cplusplus.github.io/LWG/issue3903) + - C++26で、デストラクタの冗長な`noexcept`指定が削除された(暗黙に`noexcept`であるため) From 215486d83f827aab1d2884d0f0a04c23ed72200c Mon Sep 17 00:00:00 2001 From: Akira Takahashi Date: Mon, 17 Aug 2026 16:23:41 +0900 Subject: [PATCH 22/25] =?UTF-8?q?basic=5Fstreambuf=E3=81=AEsetg=20/=20setp?= =?UTF-8?q?=20:=20=E4=BA=8B=E5=89=8D=E6=9D=A1=E4=BB=B6=E3=82=92=E8=BF=BD?= =?UTF-8?q?=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- reference/streambuf/basic_streambuf/setg.md | 5 +++++ reference/streambuf/basic_streambuf/setp.md | 5 +++++ 2 files changed, 10 insertions(+) diff --git a/reference/streambuf/basic_streambuf/setg.md b/reference/streambuf/basic_streambuf/setg.md index 746350477b..78012837db 100644 --- a/reference/streambuf/basic_streambuf/setg.md +++ b/reference/streambuf/basic_streambuf/setg.md @@ -19,6 +19,9 @@ namespace std { ## 概要 入力部分列の各ポインタを設定する。 +## 事前条件 +`[gbeg, gnext)`、`[gbeg, gend)`、`[gnext, gend)`がすべて有効な範囲であること。 + ## 事後条件 `gbeg ==` [`eback()`](eback.md) および `gnext ==` [`gptr()`](gptr.md) および `gend ==` [`egptr()`](egptr.md)。 @@ -57,3 +60,5 @@ A - [`eback()`](eback.md) - [`gptr()`](gptr.md) - [`egptr()`](egptr.md) +- [LWG Issue 4023. Preconditions of `std::basic_streambuf::setg`/`setp`](https://cplusplus.github.io/LWG/issue4023) + - C++26で、引数が有効な範囲を表すことを要求する事前条件が追加された diff --git a/reference/streambuf/basic_streambuf/setp.md b/reference/streambuf/basic_streambuf/setp.md index 828f127a48..33420be783 100644 --- a/reference/streambuf/basic_streambuf/setp.md +++ b/reference/streambuf/basic_streambuf/setp.md @@ -19,6 +19,9 @@ namespace std { ## 概要 出力部分列の各ポインタを設定する。 +## 事前条件 +`[pbeg, pend)`が有効な範囲であること。 + ## 事後条件 `pbeg ==` [`pbase()`](pbase.md) および `pbeg ==` [`pptr()`](pptr.md) および `pend ==` [`epptr()`](epptr.md)。 @@ -60,3 +63,5 @@ ABC - [`pbase()`](pbase.md) - [`pptr()`](pptr.md) - [`epptr()`](epptr.md) +- [LWG Issue 4023. Preconditions of `std::basic_streambuf::setg`/`setp`](https://cplusplus.github.io/LWG/issue4023) + - C++26で、引数が有効な範囲を表すことを要求する事前条件が追加された From dc70ded1728cece8667bc7b6d5341c41753c2e21 Mon Sep 17 00:00:00 2001 From: Akira Takahashi Date: Mon, 17 Aug 2026 16:26:11 +0900 Subject: [PATCH 23/25] =?UTF-8?q?basic=5Fstring=5Fview=E3=81=AE=E6=AF=94?= =?UTF-8?q?=E8=BC=83=E6=BC=94=E7=AE=97=E5=AD=90=20:=20=E3=83=91=E3=83=A9?= =?UTF-8?q?=E3=83=A1=E3=83=BC=E3=82=BF=E3=82=92type=5Fidentity=E3=81=A7?= =?UTF-8?q?=E5=8C=85=E3=82=93=E3=81=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../basic_string_view/op_compare_3way.md | 13 ++++++++++--- reference/string_view/basic_string_view/op_equal.md | 13 +++++++++++-- 2 files changed, 21 insertions(+), 5 deletions(-) diff --git a/reference/string_view/basic_string_view/op_compare_3way.md b/reference/string_view/basic_string_view/op_compare_3way.md index edd20d5254..008738f809 100644 --- a/reference/string_view/basic_string_view/op_compare_3way.md +++ b/reference/string_view/basic_string_view/op_compare_3way.md @@ -7,11 +7,16 @@ ```cpp namespace std { template - constexpr see below - operator<=>(basic_string_view x, - basic_string_view y) noexcept; // (1) C++20 + constexpr see below + operator<=>(basic_string_view x, + basic_string_view y) noexcept; // (1) C++20 + template + constexpr see below + operator<=>(basic_string_view x, + type_identity_t> y) noexcept; // (1) C++26 } ``` +* type_identity_t[link /reference/type_traits/type_identity.md] ## 概要 `basic_string_view`オブジェクトの三方比較を行う。 @@ -72,3 +77,5 @@ equal ## 参照 - [P1614R2 The Mothership has Landed](https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2019/p1614r2.html) - C++20での三方比較演算子の追加と、関連する演算子の自動導出 +- [LWG Issue 3950. `std::basic_string_view` comparison operators are overspecified](https://cplusplus.github.io/LWG/issue3950) + - C++26で、第2引数が`type_identity_t`で包まれ、`basic_string_view`へ暗黙変換可能な型と直接比較できるようになった(追加の比較オーバーロードの規定が不要になった) diff --git a/reference/string_view/basic_string_view/op_equal.md b/reference/string_view/basic_string_view/op_equal.md index 982f397dd4..39cbb7d23b 100644 --- a/reference/string_view/basic_string_view/op_equal.md +++ b/reference/string_view/basic_string_view/op_equal.md @@ -7,10 +7,16 @@ ```cpp namespace std { template - constexpr bool operator==(basic_string_view x, - basic_string_view y) noexcept; // (1) C++17 + constexpr bool + operator==(basic_string_view x, + basic_string_view y) noexcept; // (1) C++17 + template + constexpr bool + operator==(basic_string_view x, + type_identity_t> y) noexcept; // (1) C++26 } ``` +* type_identity_t[link /reference/type_traits/type_identity.md] ## 概要 `basic_string_view`オブジェクトの等値比較を行う。 @@ -26,6 +32,7 @@ return x.compare(y) == 0; ## 備考 - この演算子により、以下の演算子が使用可能になる (C++20): - `operator!=` +- C++26では、第2引数が[`type_identity_t`](/reference/type_traits/type_identity.md)で包まれて非推論文脈となる。これにより、`basic_string_view`へ暗黙変換可能な型([`basic_string`](/reference/string/basic_string.md)や文字列リテラルなど)と直接比較できるようになり、従来別途規定されていた追加の比較オーバーロードが不要になった。 ## 例 @@ -66,3 +73,5 @@ equal ## 参照 - [P1614R2 The Mothership has Landed](https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2019/p1614r2.html) - C++20での三方比較演算子の追加と、関連する演算子の自動導出 +- [LWG Issue 3950. `std::basic_string_view` comparison operators are overspecified](https://cplusplus.github.io/LWG/issue3950) + - C++26で、比較演算子の第2引数が`type_identity_t`で包まれ、追加の比較オーバーロードの規定が不要になった From 50a641bd4367da2cdd52015c076240f1e7547ec0 Mon Sep 17 00:00:00 2001 From: Akira Takahashi Date: Mon, 17 Aug 2026 16:26:43 +0900 Subject: [PATCH 24/25] =?UTF-8?q?text=5Fencoding::aliases=5Fview=20:=20con?= =?UTF-8?q?stexpr=E3=82=A4=E3=83=86=E3=83=AC=E3=83=BC=E3=82=BF=E3=81=A7?= =?UTF-8?q?=E3=81=82=E3=82=8B=E3=81=93=E3=81=A8=E3=81=8C=E8=A6=8F=E5=AE=9A?= =?UTF-8?q?=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/text_encoding/text_encoding/aliases_view.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/reference/text_encoding/text_encoding/aliases_view.md b/reference/text_encoding/text_encoding/aliases_view.md index be11c0bd26..524ea7c44d 100644 --- a/reference/text_encoding/text_encoding/aliases_view.md +++ b/reference/text_encoding/text_encoding/aliases_view.md @@ -24,6 +24,8 @@ struct text_encoding::aliases_view : ranges::view_interface`および[`ranges::range_reference_t`](/reference/ranges/range_reference_t.md)``はともに`const char*`を表す。 +[`ranges::iterator_t`](/reference/ranges/iterator_t.md)``はconstexprイテレータである。 + ## 例 ```cpp example @@ -76,3 +78,5 @@ Number of aliases: 3 ## 参照 - [P1885R12 Naming Text Encodings to Demystify Them](https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2023/p1885r12.pdf) +- [LWG Issue 4038. `std::text_encoding::aliases_view` should have constexpr iterators](https://cplusplus.github.io/LWG/issue4038) + - C++26で、`aliases_view`のイテレータがconstexprイテレータであることが規定された From 1f6b717db79a99b0717ddaeb925a962331fe0f23 Mon Sep 17 00:00:00 2001 From: Akira Takahashi Date: Mon, 17 Aug 2026 16:29:09 +0900 Subject: [PATCH 25/25] =?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=83=80=E3=83=B3?= =?UTF-8?q?=E3=82=B0=E3=83=AA=E3=83=B3=E3=82=B0=E5=8F=82=E7=85=A7=E3=81=AB?= =?UTF-8?q?=E3=81=AA=E3=82=8B=E5=A0=B4=E5=90=88=E3=81=AB=E5=89=8A=E9=99=A4?= =?UTF-8?q?=E5=AE=9A=E7=BE=A9=E3=81=95=E3=82=8C=E3=82=8B=E3=81=93=E3=81=A8?= =?UTF-8?q?=E3=81=8C=E8=A6=8F=E5=AE=9A=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/tuple/tuple/op_constructor.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/reference/tuple/tuple/op_constructor.md b/reference/tuple/tuple/op_constructor.md index c7d02f1340..b67f7041d5 100644 --- a/reference/tuple/tuple/op_constructor.md +++ b/reference/tuple/tuple/op_constructor.md @@ -340,6 +340,7 @@ explicit(see below) constexpr - (14) : - `I`をパラメータパック`0, 1, ..., (sizeof...(Types) - 1)`と定義して、 - C++23 : `!(`[`is_convertible_v`](/reference/type_traits/is_convertible.md)`(`[`std::forward`](/reference/utility/forward.md)`(u))), Types> && ...)`である場合、この関数は`explicit`となる + - C++26 : `(`[`reference_constructs_from_temporary_v`](/reference/type_traits/reference_constructs_from_temporary.md)`(`[`std::forward`](/reference/utility/forward.md)`(u)))> || ...)`である場合、この関数は削除定義される - (15) : - C++20 : 対応するコンストラクタ (1) と同じ条件で`explicit`となる - (16) : @@ -452,3 +453,5 @@ int main() - C++23 での (3) のコンストラクタの制約の変更(`disambiguating-constraint`等)について - [P2321R2 `zip`](https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2021/p2321r2.html#tuple) - すべての要素が[プロキシ参照](/reference/iterator/indirectly_writable.md)の場合、[プロキシ参照](/reference/iterator/indirectly_writable.md)として使用できるようにする +- [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`コンストラクタ導入時に欠けていた保護の追加)