diff --git a/reference/deque/deque/append_range.md b/reference/deque/deque/append_range.md index 55c179eb6a..d52b9af8ca 100644 --- a/reference/deque/deque/append_range.md +++ b/reference/deque/deque/append_range.md @@ -7,7 +7,11 @@ ```cpp template R> -void append_range(R&& rg); // C++23 +void + append_range(R&& rg); // (1) C++23 +template R> +constexpr void + append_range(R&& rg); // (1) C++26 ``` ## 概要 @@ -63,3 +67,7 @@ int main() |-------------------------------------------|----------------------| | [`push_back`](push_back.md) | 末尾に要素を追加する | | [`emplace_back`](emplace_back.md) | 末尾に要素を直接構築で追加する | + + +## 参照 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/deque/deque/assign.md b/reference/deque/deque/assign.md index 9ce80c50a6..a339584cf9 100644 --- a/reference/deque/deque/assign.md +++ b/reference/deque/deque/assign.md @@ -6,11 +6,21 @@ ```cpp template -void assign(InputIterator first, InputIterator last); // (1) - -void assign(size_type n, const T& t); // (2) - -void assign(initializer_list init); // (3) C++11 +void + assign(InputIterator first, InputIterator last); // (1) C++03 +template +constexpr void + assign(InputIterator first, InputIterator last); // (1) C++26 + +void + assign(size_type n, const T& t); // (2) C++03 +constexpr void + assign(size_type n, const T& t); // (2) C++26 + +void + assign(initializer_list init); // (3) C++11 +constexpr void + assign(initializer_list init); // (3) C++26 ``` * initializer_list[link /reference/initializer_list/initializer_list.md] @@ -73,3 +83,4 @@ c3 : {1 2 3 } ## 参照 - [N2679 Initializer Lists for Standard Containers(Revision 1)](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2679.pdf) +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/deque/deque/assign_range.md b/reference/deque/deque/assign_range.md index 195f38acd1..439a0fb2ce 100644 --- a/reference/deque/deque/assign_range.md +++ b/reference/deque/deque/assign_range.md @@ -7,7 +7,11 @@ ```cpp template R> -void assign_range(R&& rg); // C++23 +void + assign_range(R&& rg); // (1) C++23 +template R> +constexpr void + assign_range(R&& rg); // (1) C++26 ``` ## 概要 @@ -62,3 +66,7 @@ int main() | 名前 | 説明 | |-------------------------------------------|----------------------| | [`assign`](assign.md) | コンテナに値を代入する | + + +## 参照 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/deque/deque/at.md b/reference/deque/deque/at.md index f3274d18d2..07f81c135b 100644 --- a/reference/deque/deque/at.md +++ b/reference/deque/deque/at.md @@ -5,8 +5,15 @@ * function[meta id-type] ```cpp -reference at(size_type n); -const_reference at(size_type n) const; +reference + at(size_type n); // (1) C++03 +constexpr + reference at(size_type n); // (1) C++26 + +const_reference + at(size_type n) const; // (2) C++03 +constexpr const_reference + at(size_type n) const; // (2) C++26 ``` ## 概要 @@ -68,3 +75,7 @@ out of range! | 名前 | 説明 | |----------------------------|----------------------------------| | [`operator[]`](op_at.md) | 任意位置の要素への参照を取得する | + + +## 参照 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/deque/deque/back.md b/reference/deque/deque/back.md index b606854ddf..a8efffd1c9 100644 --- a/reference/deque/deque/back.md +++ b/reference/deque/deque/back.md @@ -5,8 +5,15 @@ * function[meta id-type] ```cpp -reference back(); -const_reference back() const; +reference + back(); // (1) C++03 +constexpr reference + back(); // (1) C++26 + +const_reference + back() const; // (2) C++03 +constexpr const_reference + back() const; // (2) C++26 ``` ## 概要 @@ -53,3 +60,7 @@ int main() | [`front`](front.md) | 先頭要素への参照を取得する | | [`push_back`](push_back.md) | 末尾に要素を追加する | | [`pop_back`](pop_back.md) | 末尾要素を削除する | + + +## 参照 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/deque/deque/begin.md b/reference/deque/deque/begin.md index d2dee08e17..26047a3194 100644 --- a/reference/deque/deque/begin.md +++ b/reference/deque/deque/begin.md @@ -5,11 +5,13 @@ * function[meta id-type] ```cpp -iterator begin(); // (1) C++03 -iterator begin() noexcept; // (1) C++11 +iterator begin(); // (1) C++03 +iterator begin() noexcept; // (1) C++11 +constexpr iterator begin() noexcept; // (1) C++26 -const_iterator begin() const; // (2) C++03 -const_iterator begin() const noexcept; // (2) C++11 +const_iterator begin() const; // (2) C++03 +const_iterator begin() const noexcept; // (2) C++11 +constexpr const_iterator begin() const noexcept; // (2) C++26 ``` ## 概要 @@ -63,3 +65,7 @@ int main() | [`cend`](cend.md) | 末尾要素を指す読み取り専用イテレータを取得する | | [`rbegin`](rbegin.md) | 末尾要素を指す逆イテレータを取得する | | [`rend`](rend.md) | 先頭要素の前を指す逆イテレータを取得する | + + +## 参照 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/deque/deque/cbegin.md b/reference/deque/deque/cbegin.md index b1ebb85fec..61cac5cc71 100644 --- a/reference/deque/deque/cbegin.md +++ b/reference/deque/deque/cbegin.md @@ -6,7 +6,8 @@ * cpp11[meta cpp] ```cpp -const_iterator cbegin() const noexcept; +const_iterator cbegin() const noexcept; // (1) C++11 +constexpr const_iterator cbegin() const noexcept; // (1) C++26 ``` ## 概要 @@ -67,3 +68,4 @@ int main() - [Visual C++](/implementation.md#visual_cpp): 2010 [mark verified], 2012 [mark verified], 2013 [mark verified] ## 参照 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/deque/deque/cend.md b/reference/deque/deque/cend.md index 27f6c440c2..2622af7442 100644 --- a/reference/deque/deque/cend.md +++ b/reference/deque/deque/cend.md @@ -6,7 +6,8 @@ * cpp11[meta cpp] ```cpp -const_iterator cend() const noexcept; +const_iterator cend() const noexcept; // (1) C++11 +constexpr const_iterator cend() const noexcept; // (1) C++26 ``` ## 概要 @@ -71,3 +72,4 @@ int main() ## 参照 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/deque/deque/clear.md b/reference/deque/deque/clear.md index 14f361df62..5ad9166694 100644 --- a/reference/deque/deque/clear.md +++ b/reference/deque/deque/clear.md @@ -5,8 +5,9 @@ * function[meta id-type] ```cpp -void clear(); // C++03 -void clear() noexcept; // C++11 +void clear(); // (1) C++03 +void clear() noexcept; // (1) C++11 +constexpr void clear() noexcept; // (1) C++26 ``` ## 概要 @@ -58,11 +59,6 @@ int main() ``` ``` -## 参照 -- [LWG Issue 2231. DR 704 removes complexity guarantee for `clear()`](http://www.open-std.org/jtc1/sc22/wg21/docs/lwg-defects.html#2231) - - C++03までこの関数の効果は`erase(begin(), end())`だったため、それによって線形時間の計算量が保証されていたが、C++11で効果の表記が変わったために、保証がなくなってしまっていた。C++14であらためて保証を追加。 - - ## 関連項目 | 名前 | 説明 | @@ -72,3 +68,9 @@ int main() | [`pop_back`](pop_back.md) | 末尾要素を削除する | | [`pop_front`](pop_front.md) | 先頭要素を削除する | | [`empty`](empty.md) | コンテナが空であるかどうかを調べる | + + +## 参照 +- [LWG Issue 2231. DR 704 removes complexity guarantee for `clear()`](http://www.open-std.org/jtc1/sc22/wg21/docs/lwg-defects.html#2231) + - C++03までこの関数の効果は`erase(begin(), end())`だったため、それによって線形時間の計算量が保証されていたが、C++11で効果の表記が変わったために、保証がなくなってしまっていた。C++14であらためて保証を追加。 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/deque/deque/crbegin.md b/reference/deque/deque/crbegin.md index c8b733ea59..79d9ad654e 100644 --- a/reference/deque/deque/crbegin.md +++ b/reference/deque/deque/crbegin.md @@ -6,7 +6,8 @@ * cpp11[meta cpp] ```cpp -const_reverse_iterator crbegin() const noexcept; +const_reverse_iterator crbegin() const noexcept; // (1) C++11 +constexpr const_reverse_iterator crbegin() const noexcept; // (1) C++26 ``` ## 概要 @@ -67,3 +68,4 @@ int main() ## 参照 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/deque/deque/crend.md b/reference/deque/deque/crend.md index 67827fcc28..55fed562fc 100644 --- a/reference/deque/deque/crend.md +++ b/reference/deque/deque/crend.md @@ -6,7 +6,8 @@ * cpp11[meta cpp] ```cpp -const_reverse_iterator crend() const noexcept; +const_reverse_iterator crend() const noexcept; // (1) C++11 +constexpr const_reverse_iterator crend() const noexcept; // (1) C++26 ``` ## 概要 @@ -67,3 +68,4 @@ int main() ## 参照 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/deque/deque/emplace.md b/reference/deque/deque/emplace.md index 8df8398677..d0ec578959 100644 --- a/reference/deque/deque/emplace.md +++ b/reference/deque/deque/emplace.md @@ -7,7 +7,9 @@ ```cpp template -iterator emplace(const_iterator position, Args&&... args); +iterator emplace(const_iterator position, Args&&... args); // (1) C++11 +template +constexpr iterator emplace(const_iterator position, Args&&... args); // (1) C++26 ``` ## 概要 @@ -85,3 +87,4 @@ int main() - [N2345 Placement Insert for Containers (Revision 2)](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2345.pdf) - [LWG Issue 2252. Strong guarantee on `vector::push_back()` still broken with C++11?](http://www.open-std.org/jtc1/sc22/wg21/docs/lwg-defects.html#2252) - 経緯の説明は、[`vector::push_back()`](/reference/vector/vector/push_back.md)ページを参照。 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/deque/deque/emplace_back.md b/reference/deque/deque/emplace_back.md index 8592139a5e..ca7bdb22f0 100644 --- a/reference/deque/deque/emplace_back.md +++ b/reference/deque/deque/emplace_back.md @@ -7,10 +7,11 @@ ```cpp template -void emplace_back(Args&&... args); // C++14 まで - +void emplace_back(Args&&... args); // (1) C++11 +template +reference emplace_back(Args&&... args); // (1) C++17 template -reference emplace_back(Args&&... args); // C++17 から +constexpr reference emplace_back(Args&&... args); // (1) C++26 ``` ## 概要 @@ -94,3 +95,4 @@ int main() - [P0084R0 Emplace Return Type](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2015/p0084r0.pdf) - [P0084R1 Emplace Return Type (Revision 1)](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/p0084r1.pdf) - [P0084R2 Emplace Return Type (Revision 2)](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/p0084r2.pdf) +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/deque/deque/emplace_front.md b/reference/deque/deque/emplace_front.md index aff678682f..b13735086a 100644 --- a/reference/deque/deque/emplace_front.md +++ b/reference/deque/deque/emplace_front.md @@ -7,10 +7,11 @@ ```cpp template -void emplace_front(Args&&... args); // C++14 まで - +void emplace_front(Args&&... args); // (1) C++11 +template +reference emplace_front(Args&&... args); // (1) C++17 template -reference emplace_front(Args&&... args); // C++17 から +constexpr reference emplace_front(Args&&... args); // (1) C++26 ``` ## 概要 @@ -94,3 +95,4 @@ int main() - [P0084R0 Emplace Return Type](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2015/p0084r0.pdf) - [P0084R1 Emplace Return Type (Revision 1)](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/p0084r1.pdf) - [P0084R2 Emplace Return Type (Revision 2)](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/p0084r2.pdf) +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/deque/deque/empty.md b/reference/deque/deque/empty.md index 7babfe8ab3..e1421e050d 100644 --- a/reference/deque/deque/empty.md +++ b/reference/deque/deque/empty.md @@ -5,10 +5,10 @@ * function[meta id-type] ```cpp -bool empty() const; // C++03 -bool empty() const noexcept; // C++11 -[[nodiscard]] bool empty() const noexcept; // C++20 -bool empty() const noexcept; // C++26 +bool empty() const; // (1) C++03 +bool empty() const noexcept; // (1) C++11 +[[nodiscard]] bool empty() const noexcept; // (1) C++20 +constexpr bool empty() const noexcept; // (1) C++26 ``` ## 概要 @@ -70,3 +70,4 @@ false - C++20で`[[nodiscard]]`が付加された - [P2422R1 Remove `nodiscard` annotations from the standard library specification](https://open-std.org/jtc1/sc22/wg21/docs/papers/2024/p2422r1.html) - C++26で`[[nodiscard]]`指定が削除された +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/deque/deque/end.md b/reference/deque/deque/end.md index 245a33ef4d..b329000038 100644 --- a/reference/deque/deque/end.md +++ b/reference/deque/deque/end.md @@ -5,11 +5,13 @@ * function[meta id-type] ```cpp -iterator end(); // (1) C++03 -iterator end() noexcept; // (1) C++11 +iterator end(); // (1) C++03 +iterator end() noexcept; // (1) C++11 +constexpr iterator end() noexcept; // (1) C++26 -const_iterator end() const; // (2) C++03 -const_iterator end() const noexcept; // (2) C++11 +const_iterator end() const; // (2) C++03 +const_iterator end() const noexcept; // (2) C++11 +constexpr const_iterator end() const noexcept; // (2) C++26 ``` ## 概要 @@ -80,3 +82,7 @@ int main() | [`cend`](cend.md) | 末尾要素の次を指す読み取り専用イテレータを取得する | | [`rbegin`](rbegin.md) | 末尾要素を指す逆イテレータを取得する | | [`rend`](rend.md) | 先頭要素の前を指す逆イテレータを取得する | + + +## 参照 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/deque/deque/erase.md b/reference/deque/deque/erase.md index 4c4386632f..327cae3623 100644 --- a/reference/deque/deque/erase.md +++ b/reference/deque/deque/erase.md @@ -7,9 +7,11 @@ ```cpp iterator erase(iterator position); // (1) C++03 iterator erase(const_iterator position); // (1) C++11 +constexpr iterator erase(const_iterator position); // (1) C++26 -iterator erase(iterator first, iterator last); // (2) C++03 -iterator erase(const_iterator first, const_iterator last); // (2) C++11 +iterator erase(iterator first, iterator last); // (2) C++03 +iterator erase(const_iterator first, const_iterator last); // (2) C++11 +constexpr iterator erase(const_iterator first, const_iterator last); // (2) C++26 ``` ## 概要 @@ -110,3 +112,4 @@ int main() ## 参照 - [N2350 Container insert/erase and iterator constness (Revision 1)](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2350.pdf) - [LWG Issue 638. `deque` end invalidation during erase](http://www.open-std.org/jtc1/sc22/wg21/docs/lwg-defects.html#638) +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/deque/deque/erase_free.md b/reference/deque/deque/erase_free.md index de73078d4a..f3859d3455 100644 --- a/reference/deque/deque/erase_free.md +++ b/reference/deque/deque/erase_free.md @@ -10,7 +10,7 @@ namespace std { typename deque::size_type erase(deque& c, const U& value); // (1) C++20 template - typename deque::size_type + constexpr typename deque::size_type erase(deque& c, const U& value); // (1) C++26 } ``` @@ -117,3 +117,4 @@ int main() { - [R1115R3 Improving the Return Value of Erase-Like Algorithms II: Free `erase`/`erase_if`](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2019/p1115r3.pdf) - [P2248R8 Enabling list-initialization for algorithms](https://open-std.org/jtc1/sc22/wg21/docs/papers/2024/p2248r8.html) - C++26で波カッコ初期化 (リスト初期化) に対応した +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/deque/deque/erase_if_free.md b/reference/deque/deque/erase_if_free.md index 0e8e34c544..7913cfc71e 100644 --- a/reference/deque/deque/erase_if_free.md +++ b/reference/deque/deque/erase_if_free.md @@ -7,7 +7,11 @@ ```cpp namespace std { template - typename deque::size_type erase_if(deque& c, Predicate pred); + typename deque::size_type + erase_if(deque& c, Predicate pred); // (1) C++20 + template + constexpr typename deque::size_type + erase_if(deque& c, Predicate pred); // (1) C++26 } ``` @@ -74,3 +78,4 @@ int main() ## 参照 - [P1209R0 Adopt consistent container erasure from Library Fundamentals 2](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2018/p1209r0.html) - [R1115R3 Improving the Return Value of Erase-Like Algorithms II: Free `erase`/`erase_if`](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2019/p1115r3.pdf) +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/deque/deque/front.md b/reference/deque/deque/front.md index b8a0bff709..78b038eae9 100644 --- a/reference/deque/deque/front.md +++ b/reference/deque/deque/front.md @@ -5,8 +5,11 @@ * function[meta id-type] ```cpp -reference front(); -const_reference front() const; +reference front(); // (1) C++03 +constexpr reference front(); // (1) C++26 + +const_reference front() const; // (2) C++03 +constexpr const_reference front() const; // (2) C++26 ``` ## 概要 @@ -53,3 +56,7 @@ int main() | [`back`](back.md) | 末尾要素への参照を取得する | | [`push_front`](push_front.md) | 先頭に要素を追加する | | [`pop_front`](pop_front.md) | 先頭要素を削除する | + + +## 参照 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/deque/deque/get_allocator.md b/reference/deque/deque/get_allocator.md index c49b963d7d..a29fb82635 100644 --- a/reference/deque/deque/get_allocator.md +++ b/reference/deque/deque/get_allocator.md @@ -5,8 +5,9 @@ * function[meta id-type] ```cpp -allocator_type get_allocator() const; // C++03 -allocator_type get_allocator() const noexcept; // C++11 +allocator_type get_allocator() const; // (1) C++03 +allocator_type get_allocator() const noexcept; // (1) C++11 +constexpr allocator_type get_allocator() const noexcept; // (1) C++26 ``` ## 概要 @@ -70,3 +71,4 @@ int main () - 2015からは、`noexcept`が修飾されている。 ## 参照 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/deque/deque/insert.md b/reference/deque/deque/insert.md index bb3183637c..7f68c56274 100644 --- a/reference/deque/deque/insert.md +++ b/reference/deque/deque/insert.md @@ -5,24 +5,58 @@ * function[meta id-type] ```cpp -iterator insert(iterator position, const T& x); // (1) C++03 -iterator insert(const_iterator position, const T& x); // (1) C++11 - -iterator insert(const_iterator position, T&& y); // (2) C++11 - -void insert(iterator position, - size_type n, const T& x); // (3) C++03 -iterator insert(const_iterator position, - size_type n, const T& x); // (3) C++11 +iterator + insert(iterator position, + const T& x); // (1) C++03 +iterator + insert(const_iterator position, + const T& x); // (1) C++11 +constexpr iterator + insert(const_iterator position, + const T& x); // (1) C++26 + +iterator + insert(const_iterator position, + T&& y); // (2) C++11 +constexpr iterator + insert(const_iterator position, + T&& y); // (2) C++26 + +void + insert(iterator position, + size_type n, + const T& x); // (3) C++03 +iterator + insert(const_iterator position, + size_type n, + const T& x); // (3) C++11 +constexpr iterator + insert(const_iterator position, + size_type n, + const T& x); // (3) C++26 template -void insert(iterator position, - InputIterator first, InputIterator last); // (4) C++03 +void + insert(iterator position, + InputIterator first, + InputIterator last); // (4) C++03 template -iterator insert(const_iterator position, - InputIterator first, InputIterator last); // (4) C++11 - -iterator insert(const_iterator position, initializer_list init); // (5) C++11 +iterator + insert(const_iterator position, + InputIterator first, + InputIterator last); // (4) C++11 +template +constexpr iterator + insert(const_iterator position, + InputIterator first, + InputIterator last); // (4) C++26 + +iterator + insert(const_iterator position, + initializer_list init); // (5) C++11 +constexpr iterator + insert(const_iterator position, + initializer_list init); // (5) C++26 ``` * initializer_list[link /reference/initializer_list/initializer_list.md] @@ -103,3 +137,4 @@ int main() - (5)の経緯となる提案文書 - [LWG Issue 2252. Strong guarantee on `vector::push_back()` still broken with C++11?](http://www.open-std.org/jtc1/sc22/wg21/docs/lwg-defects.html#2252) - 経緯の説明は、[`vector::push_back()`](/reference/vector/vector/push_back.md)ページを参照。 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/deque/deque/insert_range.md b/reference/deque/deque/insert_range.md index 71de3fc2d0..deb5c47276 100644 --- a/reference/deque/deque/insert_range.md +++ b/reference/deque/deque/insert_range.md @@ -7,7 +7,9 @@ ```cpp template R> -iterator insert_range(const_iterator pos, R&& rg); // C++23 +iterator insert_range(const_iterator pos, R&& rg); // (1) C++23 +template R> +constexpr iterator insert_range(const_iterator pos, R&& rg); // (1) C++26 ``` ## 概要 @@ -60,3 +62,7 @@ int main() |-------------------------------------------|----------------------| | [`insert`](insert.md) | 任意の位置に要素を挿入する | | [`emplace`](emplace.md) | 任意の位置に要素を直接構築で挿入する | + + +## 参照 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/deque/deque/max_size.md b/reference/deque/deque/max_size.md index a115c015fd..b7a5ac133b 100644 --- a/reference/deque/deque/max_size.md +++ b/reference/deque/deque/max_size.md @@ -5,8 +5,9 @@ * function[meta id-type] ```cpp -size_type max_size() const; // C++03 -size_type max_size() const noexcept; // C++11 +size_type max_size() const; // (1) C++03 +size_type max_size() const noexcept; // (2) C++11 +constexpr size_type max_size() const noexcept; // (3) C++26 ``` ## 概要 @@ -51,3 +52,7 @@ int main() |-------------------------|------------------| | [`size`](size.md) | 要素数を取得する | | [`resize`](resize.md) | 要素数を変更する | + + +## 参照 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/deque/deque/op_assign.md b/reference/deque/deque/op_assign.md index ef7bfc1a87..625cc558e9 100644 --- a/reference/deque/deque/op_assign.md +++ b/reference/deque/deque/op_assign.md @@ -6,10 +6,17 @@ ```cpp deque& operator=(const deque& x); // (1) C++03 -deque& operator=(deque&& x); // (2) C++11 +constexpr deque& operator=(const deque& x); // (1) C++26 + +deque& operator=(deque&& x); // (2) C++11 deque& operator=(deque&& x) - noexcept(allocator_traits::is_always_equal::value); // (2) C++17 -deque& operator=(initializer_list init); // (3) C++11 + noexcept(allocator_traits::is_always_equal::value); // (2) C++17 +constexpr + deque& operator=(deque&& x) + noexcept(allocator_traits::is_always_equal::value); // (2) C++26 + +deque& operator=(initializer_list init); // (3) C++11 +constexpr deque& operator=(initializer_list init); // (3) C++26 ``` * initializer_list[link /reference/initializer_list/initializer_list.md] @@ -85,3 +92,4 @@ c3 : {1 2 3 } - (3)の経緯となる提案文書 - [N4258 Cleaning-up noexcept in the Library, Rev 3](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n4258.pdf) - `noexcept` 追加の経緯となる提案文書 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/deque/deque/op_at.md b/reference/deque/deque/op_at.md index 15c725c4d1..57edc93686 100644 --- a/reference/deque/deque/op_at.md +++ b/reference/deque/deque/op_at.md @@ -5,8 +5,11 @@ * function[meta id-type] ```cpp -reference operator[](size_type n); -const_reference operator[](size_type n) const; +reference operator[](size_type n); // (1) C++03 +constexpr reference operator[](size_type n); // (1) C++26 + +const_reference operator[](size_type n) const; // (2) C++03 +constexpr const_reference operator[](size_type n) const; // (2) C++26 ``` ## 概要 @@ -57,3 +60,7 @@ int main() | 名前 | 説明 | |-----------------|----------------------------------| | [`at`](at.md) | 任意位置の要素への参照を取得する | + + +## 参照 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/deque/deque/op_compare_3way.md b/reference/deque/deque/op_compare_3way.md index 9103489576..783a910224 100644 --- a/reference/deque/deque/op_compare_3way.md +++ b/reference/deque/deque/op_compare_3way.md @@ -10,6 +10,10 @@ namespace std { synth-three-way-result operator<=>(const deque& x, const deque& y); // (1) C++20 + template + constexpr synth-three-way-result + operator<=>(const deque& x, + const deque& y); // (1) C++26 } ``` @@ -81,3 +85,4 @@ int main () ## 参照 - [P1614R2 The Mothership has Landed](https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2019/p1614r2.html) - C++20での三方比較演算子の追加と、関連する演算子の自動導出 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/deque/deque/op_constructor.md b/reference/deque/deque/op_constructor.md index b86a698ed1..9d63882fa7 100644 --- a/reference/deque/deque/op_constructor.md +++ b/reference/deque/deque/op_constructor.md @@ -6,39 +6,80 @@ ```cpp deque(); // (1) C++14 から +constexpr deque(); // (1) C++26 + explicit deque(const Allocator& a); // (2) C++14 から -explicit deque(const Allocator& a = Allocator()); // (1), (2) : C++11 まで。C++14 で削除 +constexpr explicit deque(const Allocator& a); // (2) C++26 + +explicit deque(const Allocator& a = Allocator()); // (1)+(2) : C++11 まで。C++14 で削除 explicit deque(size_type n, const T& value = T(), const Allocator& a = Allocator()); // (3) C++03 まで。C++11 で削除 -deque(size_type n, const T& value, +deque(size_type n, + const T& value, const Allocator& a = Allocator()); // (3) C++11 から +constexpr + deque(size_type n, + const T& value, + const Allocator& a = Allocator()); // (3) C++26 explicit deque(size_type n); // (4) C++11。C++14 で削除 -explicit deque(size_type n, - const Allocator& a = Allocator()); // (4) C++14 から +explicit + deque(size_type n, + const Allocator& a = Allocator()); // (4) C++14 から +constexpr explicit + deque(size_type n, + const Allocator& a = Allocator()); // (4) C++26 template -deque(InputIterator first, InputIterator last, - const Allocator& a = Allocator()); // (5) +deque(InputIterator first, + InputIterator last, + const Allocator& a = Allocator()); // (5) C++03 +template +constexpr + deque(InputIterator first, + InputIterator last, + const Allocator& a = Allocator()); // (5) C++26 -deque(const deque& x); // (6) -deque(deque&& y); // (7) C++11 から -deque(const deque& x, const Allocator& a); // (8) C++11 -deque(const deque& x, - const type_identity_t& a); // (8) C++23 +deque(const deque& x); // (6) C++03 +constexpr deque(const deque& x); // (6) C++26 -deque(deque&& y, const Allocator& a); // (9) C++11 -deque(deque&& y, const type_identity_t& a); // (9) C++23 +deque(deque&& y); // (7) C++11 から +constexpr deque(deque&& y); // (7) C++26 + +deque(const deque& x, + const Allocator& a); // (8) C++11 +deque(const deque& x, + const type_identity_t& a); // (8) C++23 +constexpr + deque(const deque& x, + const type_identity_t& a); // (8) C++26 + +deque(deque&& y, + const Allocator& a); // (9) C++11 +deque(deque&& y, + const type_identity_t& a); // (9) C++23 +constexpr + deque(deque&& y, + const type_identity_t& a); // (9) C++26 deque(initializer_list il, - const Allocator& a = Allocator()); // (10) C++11 から + const Allocator& a = Allocator()); // (10) C++11 +constexpr + deque(initializer_list il, + const Allocator& a = Allocator()); // (10) C++26 template R> -deque(from_range_t, R&& rg, - const Allocator& a = Allocator()); // (11) C++23 から +deque(from_range_t, + R&& rg, + const Allocator& a = Allocator()); // (11) C++23 +template R> +constexpr + deque(from_range_t, + R&& rg, + const Allocator& a = Allocator()); // (11) C++26 ``` * type_identity_t[link /reference/type_traits/type_identity.md] * initializer_list[link /reference/initializer_list/initializer_list.md] @@ -195,3 +236,4 @@ c7 : {1 2 3 } なお、Discussion の例はアロケータの型が誤っているので注意 - [P1518R2 Stop Overconstraining Allocators in Container Deduction Guides](https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2021/p1518r2.html) - C++23でのアロケータ引数を`type_identity_t`で包む変更 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/deque/deque/op_destructor.md b/reference/deque/deque/op_destructor.md index 72e9aa39f3..d937d8c1a0 100644 --- a/reference/deque/deque/op_destructor.md +++ b/reference/deque/deque/op_destructor.md @@ -5,7 +5,8 @@ * function[meta id-type] ```cpp -~deque(); +~deque(); // (1) C++03 +constexpr ~deque(); // (1) C++26 ``` ## 概要 @@ -18,3 +19,7 @@ ## 計算量 線形時間 + + +## 参照 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/deque/deque/op_equal.md b/reference/deque/deque/op_equal.md index f4310152c8..f569c1190f 100644 --- a/reference/deque/deque/op_equal.md +++ b/reference/deque/deque/op_equal.md @@ -6,8 +6,13 @@ ```cpp namespace std { template - bool operator==(const deque& x, - const deque& y); // (1) C++03 + bool + operator==(const deque& x, + const deque& y); // (1) C++03 + template + constexpr bool + operator==(const deque& x, + const deque& y); // (1) C++26 } ``` @@ -86,3 +91,4 @@ false - C++14から、2つ目のイテレータ範囲のendイテレータをとる`equal()`アルゴリズムを使用するようになった。 - [P1614R2 The Mothership has Landed](https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2019/p1614r2.html) - C++20での三方比較演算子の追加と、関連する演算子の自動導出 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/deque/deque/op_greater.md b/reference/deque/deque/op_greater.md index 609a42c2fe..079acc99ee 100644 --- a/reference/deque/deque/op_greater.md +++ b/reference/deque/deque/op_greater.md @@ -7,8 +7,13 @@ namespace std { // operator<=>により、以下の演算子が使用可能になる (C++20) template - bool operator>(const deque& x, - const deque& y); // (1) C++03 + bool + operator>(const deque& x, + const deque& y); // (1) C++03 + template + constexpr bool + operator>(const deque& x, + const deque& y); // (1) C++26 } ``` @@ -48,3 +53,4 @@ true ## 参照 - [P1614R2 The Mothership has Landed](https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2019/p1614r2.html) - C++20での三方比較演算子の追加と、関連する演算子の自動導出 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/deque/deque/op_greater_equal.md b/reference/deque/deque/op_greater_equal.md index bcfc4e9830..c9d20068ed 100644 --- a/reference/deque/deque/op_greater_equal.md +++ b/reference/deque/deque/op_greater_equal.md @@ -7,8 +7,13 @@ namespace std { // operator<=>により、以下の演算子が使用可能になる (C++20) template - bool operator>=(const deque& x, - const deque& y); // (1) C++03 + bool + operator>=(const deque& x, + const deque& y); // (1) C++03 + template + constexpr bool + operator>=(const deque& x, + const deque& y); // (1) C++26 } ``` @@ -48,3 +53,4 @@ true ## 参照 - [P1614R2 The Mothership has Landed](https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2019/p1614r2.html) - C++20での三方比較演算子の追加と、関連する演算子の自動導出 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/deque/deque/op_less.md b/reference/deque/deque/op_less.md index cb95bdce3a..091c604998 100644 --- a/reference/deque/deque/op_less.md +++ b/reference/deque/deque/op_less.md @@ -7,8 +7,13 @@ namespace std { // operator<=>により、以下の演算子が使用可能になる (C++20) template - bool operator<(const deque& x, - const deque& y); // (1) C++03 + bool + operator<(const deque& x, + const deque& y); // (1) C++03 + template + constexpr bool + operator<(const deque& x, + const deque& y); // (1) C++26 } ``` @@ -57,3 +62,4 @@ true ## 参照 - [P1614R2 The Mothership has Landed](https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2019/p1614r2.html) - C++20での三方比較演算子の追加と、関連する演算子の自動導出 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/deque/deque/op_less_equal.md b/reference/deque/deque/op_less_equal.md index 5762b861ff..005ad3ecbc 100644 --- a/reference/deque/deque/op_less_equal.md +++ b/reference/deque/deque/op_less_equal.md @@ -7,8 +7,13 @@ namespace std { // operator<=>により、以下の演算子が使用可能になる (C++20) template - bool operator<=(const deque& x, - const deque& y); // (1) C++03 + bool + operator<=(const deque& x, + const deque& y); // (1) C++03 + template + constexpr bool + operator<=(const deque& x, + const deque& y); // (1) C++26 } ``` @@ -52,3 +57,4 @@ true ## 参照 - [P1614R2 The Mothership has Landed](https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2019/p1614r2.html) - C++20での三方比較演算子の追加と、関連する演算子の自動導出 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/deque/deque/op_not_equal.md b/reference/deque/deque/op_not_equal.md index 4b725d1efb..b117e7dd37 100644 --- a/reference/deque/deque/op_not_equal.md +++ b/reference/deque/deque/op_not_equal.md @@ -7,8 +7,13 @@ namespace std { // operator==により、以下の演算子が使用可能になる (C++20) template - bool operator!=(const deque& x, - const deque& y); // (1) C++03 + bool + operator!=(const deque& x, + const deque& y); // (1) C++03 + template + constexpr bool + operator!=(const deque& x, + const deque& y); // (1) C++26 } ``` @@ -58,3 +63,4 @@ true ## 参照 - [P1614R2 The Mothership has Landed](https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2019/p1614r2.html) - C++20での三方比較演算子の追加と、関連する演算子の自動導出 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/deque/deque/pop_back.md b/reference/deque/deque/pop_back.md index 506d139ee7..ed66804ae1 100644 --- a/reference/deque/deque/pop_back.md +++ b/reference/deque/deque/pop_back.md @@ -5,7 +5,8 @@ * function[meta id-type] ```cpp -void pop_back(); +void pop_back(); // (1) C++03 +constexpr void pop_back(); // (1) C++26 ``` ## 概要 @@ -58,3 +59,7 @@ int main() | [`pop_front`](pop_front.md) | 先頭要素を削除する | | [`push_back`](push_back.md) | 末尾に要素を追加する | | [`erase`](erase.md) | 指定した要素を削除する | + + +## 参照 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/deque/deque/pop_front.md b/reference/deque/deque/pop_front.md index aef49f01dd..9f24965e02 100644 --- a/reference/deque/deque/pop_front.md +++ b/reference/deque/deque/pop_front.md @@ -5,7 +5,8 @@ * function[meta id-type] ```cpp -void pop_front(); +void pop_front(); // (1) C++03 +constexpr void pop_front(); // (1) C++26 ``` ## 概要 @@ -54,3 +55,7 @@ int main() | [`pop_back`](pop_back.md) | 末尾要素を削除する | | [`push_front`](push_front.md) | 先頭に要素を追加する | | [`erase`](erase.md) | 指定した要素を削除する | + + +## 参照 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/deque/deque/prepend_range.md b/reference/deque/deque/prepend_range.md index a5c67622ea..30d80fd71c 100644 --- a/reference/deque/deque/prepend_range.md +++ b/reference/deque/deque/prepend_range.md @@ -7,7 +7,11 @@ ```cpp template R> -void prepend_range(R&& rg); // C++23 +void + prepend_range(R&& rg); // (1) C++23 +template R> +constexpr void + prepend_range(R&& rg); // (1) C++26 ``` ## 概要 @@ -63,3 +67,7 @@ int main() |-------------------------------------------|----------------------| | [`push_front`](push_front.md) | 先頭に要素を追加する | | [`emplace_front`](emplace_front.md) | 先頭に要素を直接構築で追加する | + + +## 参照 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/deque/deque/push_back.md b/reference/deque/deque/push_back.md index d4e80868a3..50db7f1683 100644 --- a/reference/deque/deque/push_back.md +++ b/reference/deque/deque/push_back.md @@ -5,8 +5,11 @@ * function[meta id-type] ```cpp -void push_back(const T& x); // (1) -void push_back(T&& y); // (2) C++11 +void push_back(const T& x); // (1) C++03 +constexpr void push_back(const T& x); // (1) C++26 + +void push_back(T&& y); // (2) C++11 +constexpr void push_back(T&& y); // (2) C++26 ``` ## 概要 @@ -72,3 +75,4 @@ world ## 参照 - [LWG Issue 2252. Strong guarantee on `vector::push_back()` still broken with C++11?](http://www.open-std.org/jtc1/sc22/wg21/docs/lwg-defects.html#2252) - 経緯の説明は、[`vector::push_back()`](/reference/vector/vector/push_back.md)ページを参照。 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/deque/deque/push_front.md b/reference/deque/deque/push_front.md index bf7c50f849..c9bff55a46 100644 --- a/reference/deque/deque/push_front.md +++ b/reference/deque/deque/push_front.md @@ -5,8 +5,11 @@ * function[meta id-type] ```cpp -void push_front(const T& x); // (1) -void push_front(T&& y); // (2) C++11 +void push_front(const T& x); // (1) C++03 +constexpr void push_front(const T& x); // (1) C++26 + +void push_front(T&& y); // (2) C++11 +constexpr void push_front(T&& y); // (2) C++26 ``` ## 概要 @@ -72,3 +75,4 @@ world ## 参照 - [LWG Issue 2252. Strong guarantee on `vector::push_back()` still broken with C++11?](http://www.open-std.org/jtc1/sc22/wg21/docs/lwg-defects.html#2252) - 経緯の説明は、[`vector::push_back()`](/reference/vector/vector/push_back.md)ページを参照。 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/deque/deque/rbegin.md b/reference/deque/deque/rbegin.md index ec0364b5c5..60d5fd964c 100644 --- a/reference/deque/deque/rbegin.md +++ b/reference/deque/deque/rbegin.md @@ -5,11 +5,13 @@ * function[meta id-type] ```cpp -reverse_iterator rbegin(); // (1) C++03 -reverse_iterator rbegin() noexcept; // (1) C++11 +reverse_iterator rbegin(); // (1) C++03 +reverse_iterator rbegin() noexcept; // (1) C++11 +constexpr reverse_iterator rbegin() noexcept; // (1) C++26 -const_reverse_iterator rbegin() const; // (2) C++03 -const_reverse_iterator rbegin() const noexcept; // (2) C++11 +const_reverse_iterator rbegin() const; // (2) C++03 +const_reverse_iterator rbegin() const noexcept; // (2) C++11 +constexpr const_reverse_iterator rbegin() const noexcept; // (2) C++26 ``` ## 概要 @@ -63,3 +65,7 @@ int main() | [`crend`](crend.md) | 先頭要素の前を指す読み取り専用逆イテレータを取得する | | [`begin`](begin.md) | 先頭要素を指すイテレータの取得する | | [`end`](end.md) | 末尾要素の次を指すイテレータを取得する | + + +## 参照 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/deque/deque/rend.md b/reference/deque/deque/rend.md index c690d722e8..343d216750 100644 --- a/reference/deque/deque/rend.md +++ b/reference/deque/deque/rend.md @@ -5,11 +5,13 @@ * function[meta id-type] ```cpp -reverse_iterator rend(); // (1) C++03 -reverse_iterator rend() noexcept; // (1) C++11 +reverse_iterator rend(); // (1) C++03 +reverse_iterator rend() noexcept; // (1) C++11 +constexpr reverse_iterator rend() noexcept; // (1) C++26 -const_reverse_iterator rend() const; // (2) C++03 -const_reverse_iterator rend() const noexcept; // (2) C++11 +const_reverse_iterator rend() const; // (2) C++03 +const_reverse_iterator rend() const noexcept; // (2) C++11 +constexpr const_reverse_iterator rend() const noexcept; // (2) C++26 ``` ## 概要 @@ -76,3 +78,7 @@ int main() | [`crend`](crend.md) | 先頭要素の前を指す読み取り専用逆イテレータを取得する | | [`begin`](begin.md) | 先頭要素を指すイテレータの取得する | | [`end`](end.md) | 末尾要素の次を指すイテレータを取得する | + + +## 参照 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/deque/deque/resize.md b/reference/deque/deque/resize.md index 6f3626ed43..49a70248a6 100644 --- a/reference/deque/deque/resize.md +++ b/reference/deque/deque/resize.md @@ -5,10 +5,13 @@ * function[meta id-type] ```cpp -void resize(size_type sz); // (1) : C++11 -void resize(size_type sz, const T& c); // (2) : C++11 -void resize(size_type sz, const T& c = T()); // (1) + (2) : C++03 +void resize(size_type sz); // (1) C++11 +constexpr void resize(size_type sz); // (1) C++26 +void resize(size_type sz, const T& c); // (2) C++11 +constexpr void resize(size_type sz, const T& c); // (2) C++26 + +void resize(size_type sz, const T& c = T()); // (1) + (2) : C++03まで ``` ## 概要 @@ -106,6 +109,7 @@ int main() - [LWG Issue 2033. Preconditions of `reserve`, `shrink_to_fit`, and `resize` functions](http://www.open-std.org/jtc1/sc22/wg21/docs/lwg-defects.html#2033) - [LWG Issue 2323. `vector::resize(n, t)`'s specification should be simplified](http://www.open-std.org/jtc1/sc22/wg21/docs/lwg-defects.html#2323) - [LWG Issue 2160. Unintended destruction ordering-specification of `resize`](https://wg21.cmeerw.net/lwg/issue2160) +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) ## 関連項目 diff --git a/reference/deque/deque/shrink_to_fit.md b/reference/deque/deque/shrink_to_fit.md index c010a1cb06..0207f3fefd 100644 --- a/reference/deque/deque/shrink_to_fit.md +++ b/reference/deque/deque/shrink_to_fit.md @@ -6,7 +6,8 @@ * cpp11[meta cpp] ```cpp -void shrink_to_fit(); +void shrink_to_fit(); // (1) C++11 +constexpr void shrink_to_fit(); // (1) C++26 ``` ## 概要 @@ -56,3 +57,4 @@ void shrink_to_fit(); - [LWG Issue 850. Should `shrink_to_fit` apply to `std::deque`?](http://www.open-std.org/jtc1/sc22/wg21/docs/lwg-defects.html#850) - [LWG Issue 2033. Preconditions of `reserve`, `shrink_to_fit`, and `resize` functions](http://www.open-std.org/jtc1/sc22/wg21/docs/lwg-defects.html#2033) - [LWG Issue 2223. `shrink_to_fit` effect on iterator validity](https://wg21.cmeerw.net/lwg/issue2223) +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/deque/deque/size.md b/reference/deque/deque/size.md index 6f0dcf6015..6d73c06b63 100644 --- a/reference/deque/deque/size.md +++ b/reference/deque/deque/size.md @@ -5,8 +5,9 @@ * function[meta id-type] ```cpp -size_type size() const; // C++03 -size_type size() const noexcept; // C++11 +size_type size() const; // (1) C++03 +size_type size() const noexcept; // (1) C++11 +constexpr size_type size() const noexcept; // (1) C++26 ``` ## 概要 @@ -51,3 +52,7 @@ int main() |-----------------------------|----------------------------------| | [`resize`](resize.md) | 要素数を変更する | | [`max_size`](max_size.md) | 格納可能な最大の要素数を取得する | + + +## 参照 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/deque/deque/swap.md b/reference/deque/deque/swap.md index ca748c4bd7..fc43ef9f57 100644 --- a/reference/deque/deque/swap.md +++ b/reference/deque/deque/swap.md @@ -5,8 +5,14 @@ * function[meta id-type] ```cpp -void swap(deque& other); -void swap(deque& x) noexcept(allocator_traits::is_always_equal::value); // C++17 +void + swap(deque& other); // (1) C++03 +void + swap(deque& x) + noexcept(allocator_traits::is_always_equal::value); // (1) C++17 +constexpr void + swap(deque& x) + noexcept(allocator_traits::is_always_equal::value); // (1) C++26 ``` ## 概要 @@ -68,3 +74,4 @@ c2 : {1 2 3 } ## 参照 - [N4258 Cleaning-up noexcept in the Library, Rev 3](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n4258.pdf) - `noexcept` 追加の経緯となる提案文書 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/deque/deque/swap_free.md b/reference/deque/deque/swap_free.md index 632d6228bc..5810d54a2e 100644 --- a/reference/deque/deque/swap_free.md +++ b/reference/deque/deque/swap_free.md @@ -6,11 +6,19 @@ ```cpp namespace std { template - void swap(deque& x, deque& y); - + void + swap(deque& x, + deque& y); // (1) C++03 + template + void + swap(deque& x, + deque& y) + noexcept(noexcept(x.swap(y))); // (1) C++17 template - void swap(deque& x, deque& y) - noexcept(noexcept(x.swap(y))); // C++17 + constexpr void + swap(deque& x, + deque& y) + noexcept(noexcept(x.swap(y))); // (1) C++26 } ``` @@ -65,3 +73,4 @@ c2 : {1 2 3 } ## 参照 - [N4258 Cleaning-up noexcept in the Library, Rev 3](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n4258.pdf) - `noexcept` 追加の経緯となる提案文書 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/flat_map/flat_map/at.md b/reference/flat_map/flat_map/at.md index 17933b15bb..46781f3f50 100644 --- a/reference/flat_map/flat_map/at.md +++ b/reference/flat_map/flat_map/at.md @@ -6,15 +6,29 @@ * cpp23[meta cpp] ```cpp -mapped_type& at(const key_type& x); // (1) C++23 +mapped_type& + at(const key_type& x); // (1) C++23 +constexpr mapped_type& + at(const key_type& x); // (1) C++26 template -mapped_type& at(const K& x); // (2) C++23 +mapped_type& + at(const K& x); // (2) C++23 +template +constexpr mapped_type& + at(const K& x); // (2) C++26 -const mapped_type& at(const key_type& x) const; // (3) C++23 +const mapped_type& + at(const key_type& x) const; // (3) C++23 +constexpr const mapped_type& + at(const key_type& x) const; // (3) C++26 template -const mapped_type& at(const K& x) const; // (4) C++23 +const mapped_type& + at(const K& x) const; // (4) C++23 +template +constexpr const mapped_type& + at(const K& x) const; // (4) C++26 ``` ## 概要 @@ -96,3 +110,7 @@ exception std::out_of_range ## 関連項目 - [`operator[]`](op_at.md) - [`find()`](find.md) + + +## 参照 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/flat_map/flat_map/begin.md b/reference/flat_map/flat_map/begin.md index 1ef7421bb4..963de9a99e 100644 --- a/reference/flat_map/flat_map/begin.md +++ b/reference/flat_map/flat_map/begin.md @@ -6,8 +6,11 @@ * cpp23[meta cpp] ```cpp -iterator begin() noexcept; -const_iterator begin() const noexcept; +iterator begin() noexcept; // (1) C++23 +constexpr iterator begin() noexcept; // (1) C++26 + +const_iterator begin() const noexcept; // (2) C++23 +constexpr const_iterator begin() const noexcept; // (2) C++26 ``` @@ -84,3 +87,7 @@ int main() | [`flat_map::rend`](rend.md) | 先頭の前を指す逆イテレータを取得する | | [`flat_map::crbegin`](crbegin.md) | 末尾を指す逆constイテレータを取得する | | [`flat_map::crend`](crend.md) | 先頭の前を指す逆constイテレータを取得する | + + +## 参照 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/flat_map/flat_map/cbegin.md b/reference/flat_map/flat_map/cbegin.md index e377d86441..6b029073b0 100644 --- a/reference/flat_map/flat_map/cbegin.md +++ b/reference/flat_map/flat_map/cbegin.md @@ -6,7 +6,8 @@ * cpp23[meta cpp] ```cpp -const_iterator cbegin() const noexcept; +const_iterator cbegin() const noexcept; // (1) C++23 +constexpr const_iterator cbegin() const noexcept; // (1) C++26 ``` @@ -80,3 +81,7 @@ int main() | [`flat_map::rend`](rend.md) | 先頭の前を指す逆イテレータを取得する | | [`flat_map::crbegin`](crbegin.md) | 末尾を指す逆constイテレータを取得する | | [`flat_map::crend`](crend.md) | 先頭の前を指す逆constイテレータを取得する | + + +## 参照 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/flat_map/flat_map/cend.md b/reference/flat_map/flat_map/cend.md index c1240bcb31..4d412ee7cc 100644 --- a/reference/flat_map/flat_map/cend.md +++ b/reference/flat_map/flat_map/cend.md @@ -6,7 +6,8 @@ * cpp23[meta cpp] ```cpp -const_iterator cend() const noexcept; +const_iterator cend() const noexcept; // (1) C++23 +constexpr const_iterator cend() const noexcept; // (1) C++26 ``` ## 概要 @@ -83,3 +84,7 @@ int main() | [`flat_map::rend`](rend.md) | 先頭の前を指す逆イテレータを取得する | | [`flat_map::crbegin`](crbegin.md) | 末尾を指す逆constイテレータを取得する | | [`flat_map::crend`](crend.md) | 先頭の前を指す逆constイテレータを取得する | + + +## 参照 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/flat_map/flat_map/clear.md b/reference/flat_map/flat_map/clear.md index a9e14e962b..3bf20ec177 100644 --- a/reference/flat_map/flat_map/clear.md +++ b/reference/flat_map/flat_map/clear.md @@ -6,7 +6,8 @@ * cpp23[meta cpp] ```cpp -void clear() noexcept; // (1) C++23 +void clear() noexcept; // (1) C++23 +constexpr void clear() noexcept; // (1) C++26 ``` ## 概要 @@ -59,3 +60,7 @@ int main () - [Clang](/implementation.md#clang): ?? - [GCC](/implementation.md#gcc): ?? - [Visual C++](/implementation.md#visual_cpp): ?? + + +## 参照 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/flat_map/flat_map/contains.md b/reference/flat_map/flat_map/contains.md index 219733333c..5d5d5b0408 100644 --- a/reference/flat_map/flat_map/contains.md +++ b/reference/flat_map/flat_map/contains.md @@ -6,10 +6,17 @@ * cpp23[meta cpp] ```cpp -bool contains(const key_type& x) const; // (1) C++23 +bool + contains(const key_type& x) const; // (1) C++23 +constexpr bool + contains(const key_type& x) const; // (1) C++26 template -bool contains(const K& x) const; // (2) C++23 +bool + contains(const K& x) const; // (2) C++23 +template +constexpr bool + contains(const K& x) const; // (2) C++26 ``` @@ -82,3 +89,7 @@ contain - [Clang](/implementation.md#clang): ?? - [GCC](/implementation.md#gcc): ?? - [Visual C++](/implementation.md#visual_cpp): ?? + + +## 参照 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/flat_map/flat_map/count.md b/reference/flat_map/flat_map/count.md index 139090da55..f8ff66c16d 100644 --- a/reference/flat_map/flat_map/count.md +++ b/reference/flat_map/flat_map/count.md @@ -6,10 +6,17 @@ * cpp23[meta cpp] ```cpp -size_type count(const key_type& x) const; // (1) C++23 +size_type + count(const key_type& x) const; // (1) C++23 +constexpr size_type + count(const key_type& x) const; // (1) C++26 template -size_type count(const K& x) const; // (2) C++23 +size_type + count(const K& x) const; // (2) C++23 +template +constexpr size_type + count(const K& x) const; // (2) C++26 ``` ## 概要 @@ -103,3 +110,7 @@ found ## 関連項目 - [`contains()`](contains.md) + + +## 参照 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/flat_map/flat_map/crbegin.md b/reference/flat_map/flat_map/crbegin.md index a1d900a901..cca7b2c303 100644 --- a/reference/flat_map/flat_map/crbegin.md +++ b/reference/flat_map/flat_map/crbegin.md @@ -6,7 +6,8 @@ * cpp23[meta cpp] ```cpp -const_reverse_iterator crbegin() const noexcept; +const_reverse_iterator crbegin() const noexcept; // (1) C++23 +constexpr const_reverse_iterator crbegin() const noexcept; // (1) C++26 ``` ## 概要 @@ -76,3 +77,7 @@ int main() | [`flat_map::rbegin`](rbegin.md) | 末尾を指す逆イテレータを取得する | | [`flat_map::rend`](rend.md) | 先頭の前を指す逆イテレータを取得する | | [`flat_map::crend`](crend.md) | 先頭の前を指す逆constイテレータを取得する | + + +## 参照 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/flat_map/flat_map/crend.md b/reference/flat_map/flat_map/crend.md index 466666a994..7cc7777d1b 100644 --- a/reference/flat_map/flat_map/crend.md +++ b/reference/flat_map/flat_map/crend.md @@ -6,7 +6,8 @@ * cpp23[meta cpp] ```cpp -const_reverse_iterator crend() const noexcept; +const_reverse_iterator crend() const noexcept; // (1) C++23 +constexpr const_reverse_iterator crend() const noexcept; // (1) C++26 ``` @@ -74,3 +75,7 @@ int main() | [`flat_map::rbegin`](rbegin.md) | 末尾を指す逆イテレータを取得する | | [`flat_map::rend`](rend.md) | 先頭の前を指す逆イテレータを取得する | | [`flat_map::crbegin`](crbegin.md) | 末尾を指す逆constイテレータを取得する | + + +## 参照 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/flat_map/flat_map/emplace.md b/reference/flat_map/flat_map/emplace.md index 7370de6dfb..dd68da6a20 100644 --- a/reference/flat_map/flat_map/emplace.md +++ b/reference/flat_map/flat_map/emplace.md @@ -7,7 +7,11 @@ ```cpp template -pair emplace(Args&&... args); +pair + emplace(Args&&... args); // (1) C++23 +template +constexpr pair + emplace(Args&&... args); // (1) C++26 ``` ## 概要 @@ -141,3 +145,7 @@ CCC : (1, 2) | [`flat_map::insert_or_assign`](insert_or_assign.md) | 要素を挿入、あるいは代入する | | [`flat_map::emplace_hint`](emplace_hint.md) | ヒントを使って要素を直接構築する | | [`flat_map::try_emplace`](try_emplace.md) | キーが存在しない場合のみ要素を直接構築する | + + +## 参照 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/flat_map/flat_map/emplace_hint.md b/reference/flat_map/flat_map/emplace_hint.md index d4fef9c464..54593be3e8 100644 --- a/reference/flat_map/flat_map/emplace_hint.md +++ b/reference/flat_map/flat_map/emplace_hint.md @@ -7,7 +7,13 @@ ```cpp template -iterator emplace_hint(const_iterator hint, Args&&... args); +iterator + emplace_hint(const_iterator hint, + Args&&... args); // (1) C++23 +template +constexpr iterator + emplace_hint(const_iterator hint, + Args&&... args); // (1) C++26 ``` ## 概要 @@ -80,3 +86,7 @@ int main() | [`flat_map::insert_or_assign`](insert_or_assign.md) | 要素を挿入、あるいは代入する | | [`flat_map::emplace`](emplace.md) | 要素を直接構築する | | [`flat_map::try_emplace`](try_emplace.md) | キーが存在しない場合のみ要素を直接構築する | + + +## 参照 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/flat_map/flat_map/empty.md b/reference/flat_map/flat_map/empty.md index 050a8af3c5..3be76edd19 100644 --- a/reference/flat_map/flat_map/empty.md +++ b/reference/flat_map/flat_map/empty.md @@ -6,7 +6,10 @@ * cpp23[meta cpp] ```cpp -[[nodiscard]] bool empty() const noexcept; // (1) C++23 +[[nodiscard]] bool + empty() const noexcept; // (1) C++23 +[[nodiscard]] constexpr bool + empty() const noexcept; // (1) C++26 ``` ## 概要 @@ -57,3 +60,7 @@ int main () - [Clang](/implementation.md#clang): ?? - [GCC](/implementation.md#gcc): ?? - [Visual C++](/implementation.md#visual_cpp): ?? + + +## 参照 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/flat_map/flat_map/end.md b/reference/flat_map/flat_map/end.md index c91a98c0e8..914c190958 100644 --- a/reference/flat_map/flat_map/end.md +++ b/reference/flat_map/flat_map/end.md @@ -6,8 +6,11 @@ * cpp23[meta cpp] ```cpp -iterator end() noexcept; -const_iterator end() const noexcept; +iterator end() noexcept; // (1) C++23 +constexpr iterator end() noexcept; // (1) C++26 + +const_iterator end() const noexcept; // (1) C++23 +constexpr const_iterator end() const noexcept; // (1) C++26 ``` ## 概要 @@ -85,3 +88,7 @@ int main() | [`flat_map::rend`](rend.md) | 先頭の前を指す逆イテレータを取得する | | [`flat_map::crbegin`](crbegin.md) | 末尾を指す逆constイテレータを取得する | | [`flat_map::crend`](crend.md) | 先頭の前を指す逆constイテレータを取得する | + + +## 参照 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/flat_map/flat_map/equal_range.md b/reference/flat_map/flat_map/equal_range.md index 4429ab2c60..60181f28fb 100644 --- a/reference/flat_map/flat_map/equal_range.md +++ b/reference/flat_map/flat_map/equal_range.md @@ -6,17 +6,29 @@ * cpp23[meta cpp] ```cpp -pair equal_range(const key_type& x); // (1) C++23 +pair + equal_range(const key_type& x); // (1) C++23 +constexpr pair + equal_range(const key_type& x); // (1) C++26 template -pair equal_range(const K& x); // (2) C++23 +pair + equal_range(const K& x); // (2) C++23 +template +constexpr pair + equal_range(const K& x); // (2) C++26 pair - equal_range(const key_type& x) const; // (3) C++23 + equal_range(const key_type& x) const; // (3) C++23 +constexpr pair + equal_range(const key_type& x) const; // (3) C++26 template pair - equal_range(const K& x) const; // (4) C++23 + equal_range(const K& x) const; // (4) C++23 +template +constexpr pair + equal_range(const K& x) const; // (4) C++26 ``` ## 概要 @@ -81,3 +93,7 @@ B,1 | [`flat_map::lower_bound`](lower_bound.md) | 与えられた値より小さくない最初の要素へのイテレータを返す | | [`flat_map::upper_bound`](upper_bound.md) | 特定の値よりも大きい最初の要素へのイテレータを返す | | [`flat_map::find`](find.md) | 指定したキーで要素を探す | + + +## 参照 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/flat_map/flat_map/erase.md b/reference/flat_map/flat_map/erase.md index 51014fc33d..84afb49059 100644 --- a/reference/flat_map/flat_map/erase.md +++ b/reference/flat_map/flat_map/erase.md @@ -6,16 +6,22 @@ * cpp23[meta cpp] ```cpp -iterator erase(iterator position); // (1) C++23 +iterator erase(iterator position); // (1) C++23 +constexpr iterator erase(iterator position); // (1) C++26 -iterator erase(const_iterator position); // (2) C++23 +iterator erase(const_iterator position); // (2) C++23 +constexpr iterator erase(const_iterator position); // (2) C++26 -size_type erase(const key_type& x); // (3) C++23 +size_type erase(const key_type& x); // (3) C++23 +constexpr size_type erase(const key_type& x); // (3) C++26 template -size_type erase(K&& x); // (4) C++23 +size_type erase(K&& x); // (4) C++23 +template +constexpr size_type erase(K&& x); // (4) C++26 -iterator erase(const_iterator first, const_iterator last); // (5) C++23 +iterator erase(const_iterator first, const_iterator last); // (5) C++23 +constexpr iterator erase(const_iterator first, const_iterator last); // (5) C++26 ``` ## 概要 @@ -145,3 +151,7 @@ int main() | [`flat_map::clear`](clear.md) | 全ての要素を削除する | | [`flat_map::insert`](insert.md) | 要素を挿入する | | [`flat_map::find`](find.md) | 指定したキーで要素を探す | + + +## 参照 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/flat_map/flat_map/erase_if_free.md b/reference/flat_map/flat_map/erase_if_free.md index 8bc57c4bf4..b62b5ac771 100644 --- a/reference/flat_map/flat_map/erase_if_free.md +++ b/reference/flat_map/flat_map/erase_if_free.md @@ -14,7 +14,16 @@ namespace std { class Predicate> typename flat_map::size_type erase_if(flat_map& c, - Predicate pred); + Predicate pred); // (1) C++23 + template + constexpr typename flat_map::size_type + erase_if(flat_map& c, + Predicate pred); // (1) C++26 } ``` @@ -77,3 +86,7 @@ int main() - [Clang](/implementation.md#clang): ?? - [GCC](/implementation.md#gcc): ?? - [Visual C++](/implementation.md#visual_cpp): ?? + + +## 参照 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/flat_map/flat_map/extract.md b/reference/flat_map/flat_map/extract.md index 0aa1cbb9ee..2e77bd637d 100644 --- a/reference/flat_map/flat_map/extract.md +++ b/reference/flat_map/flat_map/extract.md @@ -6,7 +6,8 @@ * cpp23[meta cpp] ```cpp -containers extract() &&; // C++23 +containers extract() &&; // (1) C++23 +constexpr containers extract() &&; // (1) C++26 ``` ## 概要 @@ -88,3 +89,7 @@ int main() ## 関連項目 - [`containers`](containers.md) + + +## 参照 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/flat_map/flat_map/find.md b/reference/flat_map/flat_map/find.md index 598fec6d72..c5aa0dea22 100644 --- a/reference/flat_map/flat_map/find.md +++ b/reference/flat_map/flat_map/find.md @@ -6,15 +6,21 @@ * cpp23[meta cpp] ```cpp -iterator find(const key_type& x); // (1) C++23 +iterator find(const key_type& x); // (1) C++23 +constexpr iterator find(const key_type& x); // (1) C++26 template -iterator find(const K& x); // (2) C++23 +iterator find(const K& x); // (2) C++23 +template +constexpr iterator find(const K& x); // (2) C++26 -const_iterator find(const key_type& x) const; // (3) C++23 +const_iterator find(const key_type& x) const; // (3) C++23 +constexpr const_iterator find(const key_type& x) const; // (3) C++26 template -const_iterator find(const K& x) const; // (4) C++23 +const_iterator find(const K& x) const; // (4) C++23 +template +constexpr const_iterator find(const K& x) const; // (4) C++26 ``` ## 概要 @@ -105,3 +111,7 @@ int main() ## 関連項目 - [`contains()`](contains.md) + + +## 参照 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/flat_map/flat_map/insert.md b/reference/flat_map/flat_map/insert.md index 29d235abb7..fb9a9a674f 100644 --- a/reference/flat_map/flat_map/insert.md +++ b/reference/flat_map/flat_map/insert.md @@ -6,34 +6,77 @@ * cpp23[meta cpp] ```cpp -pair insert(const value_type& x); // (1) C++23 -pair insert(value_type&& x); // (2) C++23 - -iterator insert(const_iterator position, - const value_type& x); // (3) C++23 -iterator insert(const_iterator position, - value_type&& x); // (4) C++23 +pair + insert(const value_type& x); // (1) C++23 +constexpr pair + insert(const value_type& x); // (1) C++26 + +pair + insert(value_type&& x); // (2) C++23 +constexpr pair + insert(value_type&& x); // (2) C++26 + +iterator + insert(const_iterator position, + const value_type& x); // (3) C++23 +constexpr iterator + insert(const_iterator position, + const value_type& x); // (3) C++26 + +iterator + insert(const_iterator position, + value_type&& x); // (4) C++23 +constexpr iterator + insert(const_iterator position, + value_type&& x); // (4) C++26 template -pair insert(P&& x); // (5) C++23 +pair + insert(P&& x); // (5) C++23 +template +constexpr pair + insert(P&& x); // (5) C++26 template -iterator insert(const_iterator position, - P&&); // (6) C++23 +iterator + insert(const_iterator position, + P&&); // (6) C++23 +template +constexpr iterator + insert(const_iterator position, + P&&); // (6) C++26 template -void insert(InputIterator first, - InputIterator last); // (7) C++23 - +void + insert(InputIterator first, + InputIterator last); // (7) C++23 template -void insert(sorted_unique_t, - InputIterator first, - InputIterator last); // (8) C++23 - -void insert(initializer_list il); // (9) C++23 +constexpr void + insert(InputIterator first, + InputIterator last); // (7) C++26 -void insert(sorted_unique_t s, - initializer_list il); // (10) C++23 +template +void + insert(sorted_unique_t, + InputIterator first, + InputIterator last); // (8) C++23 +template +constexpr void + insert(sorted_unique_t, + InputIterator first, + InputIterator last); // (8) C++26 + +void + insert(initializer_list il); // (9) C++23 +constexpr void + insert(initializer_list il); // (9) C++26 + +void + insert(sorted_unique_t s, + initializer_list il); // (10) C++23 +constexpr void + insert(sorted_unique_t s, + initializer_list il); // (10) C++26 ``` * initializer_list[link /reference/initializer_list/initializer_list.md] * sorted_unique_t[link /reference/flat_map/sorted_unique_t.md] @@ -264,3 +307,7 @@ int main() | [`flat_map::emplace`](emplace.md) | 要素を直接構築する | | [`flat_map::emplace_hint`](emplace_hint.md) | ヒントを使って要素を直接構築する | | [`flat_map::try_emplace`](try_emplace.md) | キーが存在しない場合のみ要素を直接構築する | + + +## 参照 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/flat_map/flat_map/insert_or_assign.md b/reference/flat_map/flat_map/insert_or_assign.md index 498b84e1ad..77a6fd764c 100644 --- a/reference/flat_map/flat_map/insert_or_assign.md +++ b/reference/flat_map/flat_map/insert_or_assign.md @@ -9,35 +9,62 @@ template pair insert_or_assign(const key_type& k, - M&& obj); // (1) C++23 + M&& obj); // (1) C++23 +template +constexpr pair + insert_or_assign(const key_type& k, + M&& obj); // (1) C++26 template pair insert_or_assign(key_type&& k, - M&& obj); // (2) C++23 + M&& obj); // (2) C++23 +template +constexpr pair + insert_or_assign(key_type&& k, + M&& obj); // (2) C++26 template pair insert_or_assign(K&& k, - M&& obj); // (3) C++23 + M&& obj); // (3) C++23 +template +constexpr pair + insert_or_assign(K&& k, + M&& obj); // (3) C++26 template iterator insert_or_assign(const_iterator hint, const key_type& k, - M&& obj); // (4) C++23 + M&& obj); // (4) C++23 +template +constexpr iterator + insert_or_assign(const_iterator hint, + const key_type& k, + M&& obj); // (4) C++26 template iterator insert_or_assign(const_iterator hint, key_type&& k, - M&& obj); // (5) C++23 + M&& obj); // (5) C++23 +template +constexpr iterator + insert_or_assign(const_iterator hint, + key_type&& k, + M&& obj); // (5) C++26 template iterator insert_or_assign(const_iterator hint, K&& k, - M&& obj); // (6) C++23 + M&& obj); // (6) C++23 +template +constexpr iterator + insert_or_assign(const_iterator hint, + K&& k, + M&& obj); // (6) C++26 ``` ## 概要 @@ -147,3 +174,7 @@ int main() | [`flat_map::emplace`](emplace.md) | 要素を直接構築する | | [`flat_map::emplace_hint`](emplace_hint.md) | ヒントを使って要素を直接構築する | | [`flat_map::try_emplace`](try_emplace.md) | キーが存在しない場合のみ要素を直接構築する | + + +## 参照 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/flat_map/flat_map/insert_range.md b/reference/flat_map/flat_map/insert_range.md index 99a441d6a2..4862be3385 100644 --- a/reference/flat_map/flat_map/insert_range.md +++ b/reference/flat_map/flat_map/insert_range.md @@ -7,7 +7,9 @@ ```cpp template R> -void insert_range(R&& rg); // (1) C++23 +void insert_range(R&& rg); // (1) C++23 +template R> +constexpr void insert_range(R&& rg); // (1) C++26 ``` * container-compatible-range[link /reference/exposition-only/container-compatible-range.md] @@ -117,3 +119,7 @@ int main() | [`flat_map::emplace`](emplace.md) | 要素を直接構築する | | [`flat_map::emplace_hint`](emplace_hint.md) | ヒントを使って要素を直接構築する | | [`flat_map::try_emplace`](try_emplace.md) | キーが存在しない場合のみ要素を直接構築する | + + +## 参照 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/flat_map/flat_map/key_comp.md b/reference/flat_map/flat_map/key_comp.md index 67578cf116..b8fdb17693 100644 --- a/reference/flat_map/flat_map/key_comp.md +++ b/reference/flat_map/flat_map/key_comp.md @@ -6,7 +6,8 @@ * cpp23[meta cpp] ```cpp -key_compare key_comp() const; // C++23 +key_compare key_comp() const; // (1) C++23 +constexpr key_compare key_comp() const; // (1) C++26 ``` @@ -63,3 +64,7 @@ int main() |-------------------------------------|----------------------------------------------------------| | [`value_comp`](value_comp.md) | 要素比較用の関数オブジェクトを返す | | [`value_compare`](value_compare.md) | 要素値のキー部分で大小関係を判定する二項述語の型 | + + +## 参照 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/flat_map/flat_map/key_equiv.md b/reference/flat_map/flat_map/key_equiv.md index 05188988da..e3a7f43c3c 100644 --- a/reference/flat_map/flat_map/key_equiv.md +++ b/reference/flat_map/flat_map/key_equiv.md @@ -7,11 +7,17 @@ ```cpp struct key_equiv { - key_equiv(key_compare c) : comp(c) { } + key_equiv(key_compare c) : comp(c) { } // (1) C++23 + constexpr key_equiv(key_compare c) : comp(c) { } // (1) C++26 - bool operator()(const_reference x, const_reference y) const { - return !comp(x.first, y.first) && !comp(y.first, x.first); - } + bool + operator()(const_reference x, const_reference y) const { // (2) C++23 + return !comp(x.first, y.first) && !comp(y.first, x.first); + } + constexpr bool + operator()(const_reference x, const_reference y) const { // (2) C++26 + return !comp(x.first, y.first) && !comp(y.first, x.first); + } key_compare comp; }; @@ -29,3 +35,7 @@ struct key_equiv { - [Clang](/implementation.md#clang): ?? - [GCC](/implementation.md#gcc): ?? - [Visual C++](/implementation.md#visual_cpp): ?? + + +## 参照 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/flat_map/flat_map/keys.md b/reference/flat_map/flat_map/keys.md index fd3403c82e..cb536e6345 100644 --- a/reference/flat_map/flat_map/keys.md +++ b/reference/flat_map/flat_map/keys.md @@ -6,7 +6,8 @@ * cpp23[meta cpp] ```cpp -const key_container_type& keys() const noexcept; // C++23 +const key_container_type& keys() const noexcept; // (1) C++23 +constexpr const key_container_type& keys() const noexcept; // (1) C++26 ``` ## 概要 @@ -66,3 +67,7 @@ int main() | 名前 | 説明 | |-----------------------------------|-------------------------------------------| | [`flat_map::values`](values.md) | 値のコンテナを取得する | + + +## 参照 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/flat_map/flat_map/lower_bound.md b/reference/flat_map/flat_map/lower_bound.md index 84b7d2f220..08bbee2073 100644 --- a/reference/flat_map/flat_map/lower_bound.md +++ b/reference/flat_map/flat_map/lower_bound.md @@ -6,15 +6,21 @@ * cpp23[meta cpp] ```cpp -iterator lower_bound(const key_type& x); // (1) C++23 +iterator lower_bound(const key_type& x); // (1) C++23 +constexpr iterator lower_bound(const key_type& x); // (1) C++26 template -iterator lower_bound(const K& x); // (2) C++23 +iterator lower_bound(const K& x); // (2) C++23 +template +constexpr iterator lower_bound(const K& x); // (2) C++26 -const_iterator lower_bound(const key_type& x) const; // (3) C++23 +const_iterator lower_bound(const key_type& x) const; // (3) C++23 +constexpr const_iterator lower_bound(const key_type& x) const; // (3) C++26 template -const_iterator lower_bound(const K& x) const; // (4) C++23 +const_iterator lower_bound(const K& x) const; // (4) C++23 +template +constexpr const_iterator lower_bound(const K& x) const; // (4) C++26 ``` ## 概要 @@ -116,3 +122,7 @@ D,5 | [`equal_range`](equal_range.md) | 指定したキーにマッチする要素範囲を返す | | [`find`](find.md) | 指定したキーで要素を探す | | [`count`](count.md) | 指定したキーにマッチする要素の数を返す | + + +## 参照 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/flat_map/flat_map/max_size.md b/reference/flat_map/flat_map/max_size.md index f0daa8b181..6ef9dc7dbe 100644 --- a/reference/flat_map/flat_map/max_size.md +++ b/reference/flat_map/flat_map/max_size.md @@ -6,7 +6,8 @@ * cpp23[meta cpp] ```cpp -size_type max_size() const noexcept; // (1) C++23 +size_type max_size() const noexcept; // (1) C++23 +constexpr size_type max_size() const noexcept; // (1) C++26 ``` ## 概要 @@ -54,3 +55,7 @@ int main() - [Clang](/implementation.md#clang): ?? - [GCC](/implementation.md#gcc): ?? - [Visual C++](/implementation.md#visual_cpp): ?? + + +## 参照 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/flat_map/flat_map/op_assign.md b/reference/flat_map/flat_map/op_assign.md index bf845db8b2..ba5fea2798 100644 --- a/reference/flat_map/flat_map/op_assign.md +++ b/reference/flat_map/flat_map/op_assign.md @@ -6,7 +6,8 @@ * cpp23[meta cpp] ```cpp -flat_map& operator=(initializer_list il); // C++23 +flat_map& operator=(initializer_list il); // (1) C++23 +constexpr flat_map& operator=(initializer_list il); // (1) C++26 ``` * initializer_list[link /reference/initializer_list/initializer_list.md] @@ -73,3 +74,7 @@ int main() - [GCC](/implementation.md#gcc): ?? - [ICC](/implementation.md#icc): ?? - [Visual C++](/implementation.md#visual_cpp): ?? + + +## 参照 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/flat_map/flat_map/op_at.md b/reference/flat_map/flat_map/op_at.md index 30ab910e6b..1f4c0d69a0 100644 --- a/reference/flat_map/flat_map/op_at.md +++ b/reference/flat_map/flat_map/op_at.md @@ -6,11 +6,22 @@ * cpp23[meta cpp] ```cpp -mapped_type& operator[](const key_type& x); // (1) C++23 -mapped_type& operator[](key_type&& x); // (2) C++23 +mapped_type& + operator[](const key_type& x); // (1) C++23 +constexpr mapped_type& + operator[](const key_type& x); // (1) C++26 +mapped_type& + operator[](key_type&& x); // (2) C++23 +constexpr mapped_type& + operator[](key_type&& x); // (2) C++26 + +template +mapped_type& + operator[](K&& x); // (3) C++23 template -mapped_type& operator[](K&& x); // (3) C++23 +constexpr mapped_type& + operator[](K&& x); // (3) C++26 ``` ## 概要 @@ -95,3 +106,7 @@ a ## 関連項目 - [`at()`](at.md) + + +## 参照 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/flat_map/flat_map/op_compare_3way.md b/reference/flat_map/flat_map/op_compare_3way.md index d9864b9116..fba7c624f5 100644 --- a/reference/flat_map/flat_map/op_compare_3way.md +++ b/reference/flat_map/flat_map/op_compare_3way.md @@ -9,6 +9,9 @@ synth-three-way-result operator<=>(const flat_map& x, const flat_map& y); // (1) C++23 +constexpr synth-three-way-result + operator<=>(const flat_map& x, + const flat_map& y); // (1) C++26 ``` ## 概要 @@ -87,3 +90,7 @@ false - [Clang](/implementation.md#clang): ?? - [GCC](/implementation.md#gcc): ?? - [Visual C++](/implementation.md#visual_cpp): ?? + + +## 参照 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/flat_map/flat_map/op_constructor.md b/reference/flat_map/flat_map/op_constructor.md index 102ea61d55..221de1338b 100644 --- a/reference/flat_map/flat_map/op_constructor.md +++ b/reference/flat_map/flat_map/op_constructor.md @@ -8,118 +8,297 @@ ```cpp // ____要素数ゼロのflat_mapを構築____ -flat_map() : flat_map(key_compare()) { } // (1) C++23 +flat_map() : flat_map(key_compare()) { } // (1) C++23 +constexpr + flat_map() : flat_map(key_compare()) { } // (1) C++26 -explicit flat_map(const key_compare& comp) // (2) C++23 +explicit + flat_map(const key_compare& comp) // (2) C++23 : c(), compare(comp) { } +constexpr explicit + flat_map(const key_compare& comp) // (2) C++26 + : c(), compare(comp) { } template -explicit flat_map(const Allocator& a); // (3) C++23 +explicit + flat_map(const Allocator& a); // (3) C++23 +template +constexpr explicit + flat_map(const Allocator& a); // (3) C++26 template -flat_map(const key_compare& comp, const Allocator& a); // (4) C++23 +flat_map(const key_compare& comp, + const Allocator& a); // (4) C++23 +template +constexpr + flat_map(const key_compare& comp, + const Allocator& a); // (4) C++26 // ____アロケータを伴うコピー&ムーブコンストラクタ____ template - flat_map(const flat_map& x, const Allocator& a); // (5) C++26 + constexpr + flat_map(const flat_map& x, + const Allocator& a); // (5) C++26 template - flat_map(flat_map&& x, const Allocator& a); // (6) C++26 + constexpr + flat_map(flat_map&& x, + const Allocator& a); // (6) C++26 // ____key_container_typeとmapped_container_typeから構築____ -flat_map(key_container_type key_cont, mapped_container_type mapped_cont, - const key_compare& comp = key_compare()); // (7) C++23 +flat_map(key_container_type key_cont, + mapped_container_type mapped_cont, + const key_compare& comp = key_compare()); // (7) C++23 +constexpr + flat_map(key_container_type key_cont, + mapped_container_type mapped_cont, + const key_compare& comp = key_compare()); // (7) C++26 template -flat_map(const key_container_type& key_cont, const mapped_container_type& mapped_cont, - const Allocator& a); // (8) C++23 +flat_map(const key_container_type& key_cont, + const mapped_container_type& mapped_cont, + const Allocator& a); // (8) C++23 +template +constexpr + flat_map(const key_container_type& key_cont, + const mapped_container_type& mapped_cont, + const Allocator& a); // (8) C++26 template -flat_map(const key_container_type& key_cont, const mapped_container_type& mapped_cont, - const key_compare& comp, const Allocator& a); // (9) C++23 +flat_map(const key_container_type& key_cont, + const mapped_container_type& mapped_cont, + const key_compare& comp, + const Allocator& a); // (9) C++23 +template +constexpr + flat_map(const key_container_type& key_cont, + const mapped_container_type& mapped_cont, + const key_compare& comp, + const Allocator& a); // (9) C++26 // ____key_container_typeとmapped_container_type(共にソート済み且つ重複なし)から構築____ -flat_map(sorted_unique_t, key_container_type key_cont, mapped_container_type mapped_cont, - const key_compare& comp = key_compare()); // (10) C++23 +flat_map(sorted_unique_t, + key_container_type key_cont, + mapped_container_type mapped_cont, + const key_compare& comp = key_compare()); // (10) C++23 +constexpr + flat_map(sorted_unique_t, + key_container_type key_cont, + mapped_container_type mapped_cont, + const key_compare& comp = key_compare()); // (10) C++26 template -flat_map(sorted_unique_t, const key_container_type& key_cont, - const mapped_container_type& mapped_cont, const Allocator& a); // (11) C++23 +flat_map(sorted_unique_t, + const key_container_type& key_cont, + const mapped_container_type& mapped_cont, + const Allocator& a); // (11) C++23 +template +constexpr + flat_map(sorted_unique_t, + const key_container_type& key_cont, + const mapped_container_type& mapped_cont, + const Allocator& a); // (11) C++26 template -flat_map(sorted_unique_t, const key_container_type& key_cont, +flat_map(sorted_unique_t, + const key_container_type& key_cont, const mapped_container_type& mapped_cont, - const key_compare& comp, const Allocator& a); // (12) C++23 + const key_compare& comp, + const Allocator& a); // (12) C++23 +template +constexpr + flat_map(sorted_unique_t, + const key_container_type& key_cont, + const mapped_container_type& mapped_cont, + const key_compare& comp, + const Allocator& a); // (12) C++26 // ____イテレータから構築____ template -flat_map(InputIterator first, InputIterator last, const key_compare& comp = key_compare()) // (13) C++23 +flat_map(InputIterator first, + InputIterator last, + const key_compare& comp = key_compare()) // (13) C++23 : c(), compare(comp) { insert(first, last); } +template +constexpr + flat_map(InputIterator first, + InputIterator last, + const key_compare& comp = key_compare()) // (13) C++26 + : c(), compare(comp) { insert(first, last); } template -flat_map(InputIterator first, InputIterator last, const Allocator& a); // (14) C++23 +flat_map(InputIterator first, + InputIterator last, + const Allocator& a); // (14) C++23 +template +constexpr + flat_map(InputIterator first, + InputIterator last, + const Allocator& a); // (14) C++26 template -flat_map(InputIterator first, InputIterator last, - const key_compare& comp, const Allocator& a); // (15) C++23 +flat_map(InputIterator first, + InputIterator last, + const key_compare& comp, + const Allocator& a); // (15) C++23 +template +constexpr + flat_map(InputIterator first, + InputIterator last, + const key_compare& comp, + const Allocator& a); // (15) C++26 // ____イテレータ(ソート済み且つ重複なし)から構築____ template -flat_map(sorted_unique_t s, InputIterator first, InputIterator last, - const key_compare& comp = key_compare()) // (16) C++23 +flat_map(sorted_unique_t s, + InputIterator first, + InputIterator last, + const key_compare& comp = key_compare()) // (16) C++23 : c(), compare(comp) { insert(s, first, last); } +template +constexpr + flat_map(sorted_unique_t s, + InputIterator first, + InputIterator last, + const key_compare& comp = key_compare()) // (16) C++26 + : c(), compare(comp) { insert(s, first, last); } template -flat_map(sorted_unique_t, InputIterator first, InputIterator last, const Allocator& a); // (17) C++23 +flat_map(sorted_unique_t, + InputIterator first, + InputIterator last, + const Allocator& a); // (17) C++23 +template +constexpr flat_map(sorted_unique_t, + InputIterator first, + InputIterator last, + const Allocator& a); // (17) C++26 template -flat_map(sorted_unique_t, InputIterator first, InputIterator last, - const key_compare& comp, const Allocator& a); // (18) C++23 +flat_map(sorted_unique_t, + InputIterator first, + InputIterator last, + const key_compare& comp, + const Allocator& a); // (18) C++23 +template +constexpr + flat_map(sorted_unique_t, + InputIterator first, + InputIterator last, + const key_compare& comp, + const Allocator& a); // (18) C++26 // ____Rangeから構築____ template R> -flat_map(from_range_t fr, R&& rg) // (19) C++23 +flat_map(from_range_t fr, + R&& rg) // (19) C++23 : flat_map(fr, forward(rg), key_compare()) { } +template R> +constexpr + flat_map(from_range_t fr, + R&& rg) // (19) C++26 + : flat_map(fr, forward(rg), key_compare()) { } template R> -flat_map(from_range_t, R&& rg, const key_compare& comp) // (20) C++23 +flat_map(from_range_t, + R&& rg, + const key_compare& comp) // (20) C++23 : flat_map(comp) { insert_range(forward(rg)); } +template R> +constexpr + flat_map(from_range_t, + R&& rg, + const key_compare& comp) // (20) C++26 + : flat_map(comp) { insert_range(forward(rg)); } template R, class Allocator> -flat_map(from_range_t, R&& rg, const Allocator& a); // (21) C++23 +flat_map(from_range_t, + R&& rg, + const Allocator& a); // (21) C++23 +template R, class Allocator> +constexpr + flat_map(from_range_t, + R&& rg, + const Allocator& a); // (21) C++26 template R, class Allocator> -flat_map(from_range_t, R&& rg, const key_compare& comp, const Allocator& a); // (22) C++23 +flat_map(from_range_t, + R&& rg, + const key_compare& comp, + const Allocator& a); // (22) C++23 +template R, class Allocator> +constexpr + flat_map(from_range_t, + R&& rg, + const key_compare& comp, + const Allocator& a); // (22) C++26 // ____initializer_listから構築____ -flat_map(initializer_list il, const key_compare& comp = key_compare()) // (23) C++23 +flat_map(initializer_list il, + const key_compare& comp = key_compare()) // (23) C++23 : flat_map(il.begin(), il.end(), comp) { } +constexpr + flat_map(initializer_list il, + const key_compare& comp = key_compare()) // (23) C++26 + : flat_map(il.begin(), il.end(), comp) { } template -flat_map(initializer_list il, const Allocator& a); // (24) C++23 +flat_map(initializer_list il, + const Allocator& a); // (24) C++23 +template +constexpr + flat_map(initializer_list il, + const Allocator& a); // (24) C++26 template -flat_map(initializer_list il, const key_compare& comp, const Allocator& a); // (25) C++23 +flat_map(initializer_list il, + const key_compare& comp, + const Allocator& a); // (25) C++23 +template +constexpr flat_map(initializer_list il, + const key_compare& comp, + const Allocator& a); // (25) C++26 // ____initializer_list(ソート済み且つ重複なし)から構築____ -flat_map(sorted_unique_t s, initializer_list il, - const key_compare& comp = key_compare()) // (26) C++23 +flat_map(sorted_unique_t s, + initializer_list il, + const key_compare& comp = key_compare()) // (26) C++23 : flat_map(s, il.begin(), il.end(), comp) { } +constexpr + flat_map(sorted_unique_t s, + initializer_list il, + const key_compare& comp = key_compare()) // (26) C++26 + : flat_map(s, il.begin(), il.end(), comp) { } template -flat_map(sorted_unique_t, initializer_list il, const Allocator& a); // (27) C++23 +flat_map(sorted_unique_t, + initializer_list il, + const Allocator& a); // (27) C++23 +template +constexpr + flat_map(sorted_unique_t, + initializer_list il, + const Allocator& a); // (27) C++26 template -flat_map(sorted_unique_t, initializer_list il, - const key_compare& comp, const Allocator& a); // (28) C++23 +flat_map(sorted_unique_t, + initializer_list il, + const key_compare& comp, + const Allocator& a); // (28) C++23 +template +constexpr + flat_map(sorted_unique_t, + initializer_list il, + const key_compare& comp, + const Allocator& a); // (28) C++26 ``` * initializer_list[link /reference/initializer_list/initializer_list.md] * from_range_t[link ../../ranges/from_range_t.md] @@ -268,3 +447,7 @@ int main() | 名前 | 説明 | |---------------------------------------|--------------------------------------------| | [`uses_allocator`](uses_allocator.md) | 指定されたアロケータと合致するかをチェックする | + + +## 参照 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/flat_map/flat_map/op_equal.md b/reference/flat_map/flat_map/op_equal.md index 1a5538c3df..7fc6f22168 100644 --- a/reference/flat_map/flat_map/op_equal.md +++ b/reference/flat_map/flat_map/op_equal.md @@ -6,7 +6,8 @@ * cpp23[meta cpp] ```cpp -friend bool operator==(const flat_map& x, const flat_map& y); +friend bool operator==(const flat_map& x, const flat_map& y); // (1) C++23 +constexpr friend bool operator==(const flat_map& x, const flat_map& y); // (1) C++26 ``` ## 概要 @@ -71,3 +72,7 @@ true - [Clang](/implementation.md#clang): ?? - [GCC](/implementation.md#gcc): ?? - [Visual C++](/implementation.md#visual_cpp): ?? + + +## 参照 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/flat_map/flat_map/rbegin.md b/reference/flat_map/flat_map/rbegin.md index 6f275316dd..efd6814faf 100644 --- a/reference/flat_map/flat_map/rbegin.md +++ b/reference/flat_map/flat_map/rbegin.md @@ -6,8 +6,11 @@ * cpp23[meta cpp] ```cpp -reverse_iterator rbegin() noexcept; -const_reverse_iterator rbegin() const noexcept; +reverse_iterator rbegin() noexcept; // (1) C++23 +constexpr reverse_iterator rbegin() noexcept; // (1) C++26 + +const_reverse_iterator rbegin() const noexcept; // (2) C++23 +constexpr const_reverse_iterator rbegin() const noexcept; // (2) C++26 ``` ## 概要 @@ -79,3 +82,7 @@ int main() | [`flat_map::rend`](rend.md) | 先頭の前を指す逆イテレータを取得する | | [`flat_map::crbegin`](crbegin.md) | 末尾を指す逆constイテレータを取得する | | [`flat_map::crend`](crend.md) | 先頭の前を指す逆constイテレータを取得する | + + +## 参照 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/flat_map/flat_map/rend.md b/reference/flat_map/flat_map/rend.md index f77850a43b..057dce4c8c 100644 --- a/reference/flat_map/flat_map/rend.md +++ b/reference/flat_map/flat_map/rend.md @@ -6,8 +6,11 @@ * cpp23[meta cpp] ```cpp -reverse_iterator rend() noexcept; -const_reverse_iterator rend() const noexcept; +reverse_iterator rend() noexcept; // (1) C++23 +constexpr reverse_iterator rend() noexcept; // (1) C++26 + +const_reverse_iterator rend() const noexcept; // (2) C++23 +constexpr const_reverse_iterator rend() const noexcept; // (2) C++26 ``` ## 概要 @@ -72,3 +75,7 @@ int main() | [`flat_map::rbegin`](rbegin.md) | 末尾を指す逆イテレータを取得する | | [`flat_map::crbegin`](crbegin.md) | 末尾を指す逆constイテレータを取得する | | [`flat_map::crend`](crend.md) | 先頭の前を指す逆constイテレータを取得する | + + +## 参照 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/flat_map/flat_map/replace.md b/reference/flat_map/flat_map/replace.md index 07ff97fd70..26b9fb0256 100644 --- a/reference/flat_map/flat_map/replace.md +++ b/reference/flat_map/flat_map/replace.md @@ -6,7 +6,12 @@ * cpp23[meta cpp] ```cpp -void replace(key_container_type&& key_cont, mapped_container_type&& mapped_cont); // C++23 +void + replace(key_container_type&& key_cont, + mapped_container_type&& mapped_cont); // (1) C++23 +constexpr void + replace(key_container_type&& key_cont, + mapped_container_type&& mapped_cont); // (2) C++26 ``` ## 概要 @@ -17,7 +22,7 @@ void replace(key_container_type&& key_cont, mapped_container_type&& mapped_cont) `flat_map` クラスが内部で保持している [`containers`](containers.md) を `c` とすると、以下と等価。 ```cpp c.keys = std::move(key_cont); - c.values = std::move(mapped_cont) + c.values = std::move(mapped_cont); ``` @@ -92,3 +97,7 @@ int main() - [GCC](/implementation.md#gcc): ?? - [ICC](/implementation.md#icc): ?? - [Visual C++](/implementation.md#visual_cpp): ?? + + +## 参照 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/flat_map/flat_map/size.md b/reference/flat_map/flat_map/size.md index 328270899d..62b79228e2 100644 --- a/reference/flat_map/flat_map/size.md +++ b/reference/flat_map/flat_map/size.md @@ -6,7 +6,8 @@ * cpp23[meta cpp] ```cpp -size_type size() const noexcept; +size_type size() const noexcept; // (1) C++23 +constexpr size_type size() const noexcept; // (1) C++26 ``` ## 概要 @@ -67,3 +68,7 @@ int main () ## 関連項目 - [`empty()`](empty.md) + + +## 参照 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/flat_map/flat_map/swap.md b/reference/flat_map/flat_map/swap.md index e75cc45a73..2936b8f8d7 100644 --- a/reference/flat_map/flat_map/swap.md +++ b/reference/flat_map/flat_map/swap.md @@ -6,7 +6,8 @@ * cpp23[meta cpp] ```cpp -void swap(flat_map& y) noexcept; // (1) C++23 +void swap(flat_map& y) noexcept; // (1) C++23 +constexpr void swap(flat_map& y) noexcept; // (1) C++26 ``` ## 概要 @@ -79,3 +80,7 @@ fm2 : {[10,a], [20,b], [30,c]} - [Clang](/implementation.md#clang): ?? - [GCC](/implementation.md#gcc): ?? - [Visual C++](/implementation.md#visual_cpp): ?? + + +## 参照 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/flat_map/flat_map/swap_free.md b/reference/flat_map/flat_map/swap_free.md index 8ac0a80c6c..2988842706 100644 --- a/reference/flat_map/flat_map/swap_free.md +++ b/reference/flat_map/flat_map/swap_free.md @@ -6,9 +6,14 @@ ```cpp namespace std { - template - void swap(flat_map& x, - flat_map& y); // (1) C++23 + template + void + swap(flat_map& x, + flat_map& y); // (1) C++23 + template + constexpr void + swap(flat_map& x, + flat_map& y); // (1) C++26 } ``` @@ -81,3 +86,7 @@ fm2 : {[10,a], [20,b], [30,c]} - [Clang](/implementation.md#clang): ?? - [GCC](/implementation.md#gcc): ?? - [Visual C++](/implementation.md#visual_cpp): ?? + + +## 参照 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/flat_map/flat_map/try_emplace.md b/reference/flat_map/flat_map/try_emplace.md index 9a5febe3af..8da8cb7c46 100644 --- a/reference/flat_map/flat_map/try_emplace.md +++ b/reference/flat_map/flat_map/try_emplace.md @@ -9,35 +9,62 @@ template pair try_emplace(const key_type& k, - Args&&... args); // (1) C++23 + Args&&... args); // (1) C++23 +template +constexpr pair + try_emplace(const key_type& k, + Args&&... args); // (1) C++26 template pair try_emplace(key_type&& k, - Args&&... args); // (2) C++23 + Args&&... args); // (2) C++23 +template +constexpr pair + try_emplace(key_type&& k, + Args&&... args); // (2) C++26 template iterator try_emplace(const_iterator hint, const key_type& k, - Args&&... args); // (3) C++23 + Args&&... args); // (3) C++23 +template +constexpr iterator + try_emplace(const_iterator hint, + const key_type& k, + Args&&... args); // (3) C++26 template iterator try_emplace(const_iterator hint, key_type&& k, - Args&&... args); // (4) C++23 + Args&&... args); // (4) C++23 +template +constexpr iterator + try_emplace(const_iterator hint, + key_type&& k, + Args&&... args); // (4) C++26 template pair try_emplace(K&& k - Args&&... args); // (5) C++23 + Args&&... args); // (5) C++23 +template +constexpr pair + try_emplace(K&& k + Args&&... args); // (5) C++26 template iterator try_emplace(const_iterator hint, K&& k, - Args&&... args); // (6) C++23 + Args&&... args); // (6) C++23 +template +constexpr iterator + try_emplace(const_iterator hint, + K&& k, + Args&&... args); // (6) C++26 ``` ## 概要 @@ -173,3 +200,7 @@ false, 114, false | [`flat_map::insert_or_assign`](insert_or_assign.md) | 要素を挿入、あるいは代入する | | [`flat_map::emplace`](emplace.md) | 要素を直接構築する | | [`flat_map::emplace_hint`](emplace_hint.md) | ヒントを使って要素を直接構築する | + + +## 参照 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/flat_map/flat_map/upper_bound.md b/reference/flat_map/flat_map/upper_bound.md index b3d2d63c91..814cb2c000 100644 --- a/reference/flat_map/flat_map/upper_bound.md +++ b/reference/flat_map/flat_map/upper_bound.md @@ -6,15 +6,21 @@ * cpp23[meta cpp] ```cpp -iterator upper_bound(const key_type& x); // (1) C++23 +iterator upper_bound(const key_type& x); // (1) C++23 +constexpr iterator upper_bound(const key_type& x); // (1) C++26 template -iterator upper_bound(const K& x); // (2) C++23 +iterator upper_bound(const K& x); // (2) C++23 +template +constexpr iterator upper_bound(const K& x); // (2) C++26 -const_iterator upper_bound(const key_type& x) const; // (3) C++23 +const_iterator upper_bound(const key_type& x) const; // (3) C++23 +constexpr const_iterator upper_bound(const key_type& x) const; // (3) C++26 template -const_iterator upper_bound(const K& x) const; // (4) C++23 +const_iterator upper_bound(const K& x) const; // (4) C++23 +template +constexpr const_iterator upper_bound(const K& x) const; // (4) C++26 ``` ## 概要 @@ -116,3 +122,7 @@ D,5 | [`equal_range`](equal_range.md) | 指定したキーにマッチする要素範囲を返す | | [`find`](find.md) | 指定したキーで要素を探す | | [`count`](count.md) | 指定したキーにマッチする要素の数を返す | + + +## 参照 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/flat_map/flat_map/value_comp.md b/reference/flat_map/flat_map/value_comp.md index 9142b87da3..f60471d958 100644 --- a/reference/flat_map/flat_map/value_comp.md +++ b/reference/flat_map/flat_map/value_comp.md @@ -6,7 +6,8 @@ * cpp23[meta cpp] ```cpp -value_compare value_comp() const; // C++23 +value_compare value_comp() const; // (1) C++23 +constexpr value_compare value_comp() const; // (1) C++26 ``` @@ -70,3 +71,7 @@ int main() |-------------------------------------|----------------------------------------------------------| | [`key_comp`](key_comp.md) | キー比較用の関数オブジェクトを取得する | | [`value_compare`](value_compare.md) | 要素値のキー部分で大小関係を判定する二項述語の型 | + + +## 参照 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/flat_map/flat_map/values.md b/reference/flat_map/flat_map/values.md index 1db318e3c7..5b9f543daf 100644 --- a/reference/flat_map/flat_map/values.md +++ b/reference/flat_map/flat_map/values.md @@ -6,7 +6,8 @@ * cpp23[meta cpp] ```cpp -const mapped_container_type& values() const noexcept; // C++23 +const mapped_container_type& values() const noexcept; // (1) C++23 +constexpr const mapped_container_type& values() const noexcept; // (1) C++26 ``` ## 概要 @@ -66,3 +67,7 @@ C | 名前 | 説明 | |-------------------------------|-------------------------------------------| | [`flat_map::keys`](keys.md) | キーのコンテナを取得する | + + +## 参照 +- [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/begin.md b/reference/flat_map/flat_multimap/begin.md index 5efeb7caf1..838d316a3b 100644 --- a/reference/flat_map/flat_multimap/begin.md +++ b/reference/flat_map/flat_multimap/begin.md @@ -6,8 +6,11 @@ * cpp23[meta cpp] ```cpp -iterator begin() noexcept; -const_iterator begin() const noexcept; +iterator begin() noexcept; // (1) C++23 +constexpr iterator begin() noexcept; // (1) C++26 + +const_iterator begin() const noexcept; // (2) C++23 +constexpr const_iterator begin() const noexcept; // (2) C++26 ``` @@ -77,3 +80,7 @@ int main() | [`flat_multimap::rend`](rend.md) | 先頭の前を指す逆イテレータを取得する | | [`flat_multimap::crbegin`](crbegin.md) | 末尾を指す逆constイテレータを取得する | | [`flat_multimap::crend`](crend.md) | 先頭の前を指す逆constイテレータを取得する | + + +## 参照 +- [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/cbegin.md b/reference/flat_map/flat_multimap/cbegin.md index b668b771ab..596f6b051c 100644 --- a/reference/flat_map/flat_multimap/cbegin.md +++ b/reference/flat_map/flat_multimap/cbegin.md @@ -6,7 +6,8 @@ * cpp23[meta cpp] ```cpp -const_iterator cbegin() const noexcept; +const_iterator cbegin() const noexcept; // (1) C++23 +constexpr const_iterator cbegin() const noexcept; // (1) C++26 ``` @@ -73,3 +74,7 @@ int main() | [`flat_multimap::rend`](rend.md) | 先頭の前を指す逆イテレータを取得する | | [`flat_multimap::crbegin`](crbegin.md) | 末尾を指す逆constイテレータを取得する | | [`flat_multimap::crend`](crend.md) | 先頭の前を指す逆constイテレータを取得する | + + +## 参照 +- [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/cend.md b/reference/flat_map/flat_multimap/cend.md index 3cbbb6a328..06013e304c 100644 --- a/reference/flat_map/flat_multimap/cend.md +++ b/reference/flat_map/flat_multimap/cend.md @@ -6,7 +6,8 @@ * cpp23[meta cpp] ```cpp -const_iterator cend() const noexcept; +const_iterator cend() const noexcept; // (1) C++23 +constexpr const_iterator cend() const noexcept; // (1) C++26 ``` ## 概要 @@ -76,3 +77,7 @@ int main() | [`flat_multimap::rend`](rend.md) | 先頭の前を指す逆イテレータを取得する | | [`flat_multimap::crbegin`](crbegin.md) | 末尾を指す逆constイテレータを取得する | | [`flat_multimap::crend`](crend.md) | 先頭の前を指す逆constイテレータを取得する | + + +## 参照 +- [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/clear.md b/reference/flat_map/flat_multimap/clear.md index 9eabc66325..7ca4a20bc1 100644 --- a/reference/flat_map/flat_multimap/clear.md +++ b/reference/flat_map/flat_multimap/clear.md @@ -6,7 +6,8 @@ * cpp23[meta cpp] ```cpp -void clear() noexcept; // (1) C++23 +void clear() noexcept; // (1) C++23 +constexpr void clear() noexcept; // (1) C++26 ``` ## 概要 @@ -58,3 +59,7 @@ int main () - [Clang](/implementation.md#clang): ?? - [GCC](/implementation.md#gcc): ?? - [Visual C++](/implementation.md#visual_cpp): ?? + + +## 参照 +- [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/contains.md b/reference/flat_map/flat_multimap/contains.md index 3f58809c47..1f68bad2cd 100644 --- a/reference/flat_map/flat_multimap/contains.md +++ b/reference/flat_map/flat_multimap/contains.md @@ -6,10 +6,17 @@ * cpp23[meta cpp] ```cpp -bool contains(const key_type& x) const; // (1) C++23 +bool + contains(const key_type& x) const; // (1) C++23 +constexpr bool + contains(const key_type& x) const; // (1) C++26 template -bool contains(const K& x) const; // (2) C++23 +bool + contains(const K& x) const; // (2) C++23 +template +constexpr bool + contains(const K& x) const; // (2) C++26 ``` @@ -82,3 +89,7 @@ contain - [Clang](/implementation.md#clang): ?? - [GCC](/implementation.md#gcc): ?? - [Visual C++](/implementation.md#visual_cpp): ?? + + +## 参照 +- [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/count.md b/reference/flat_map/flat_multimap/count.md index 1e59465e3b..d5de8b7357 100644 --- a/reference/flat_map/flat_multimap/count.md +++ b/reference/flat_map/flat_multimap/count.md @@ -6,10 +6,17 @@ * cpp23[meta cpp] ```cpp -size_type count(const key_type& x) const; // (1) C++23 +size_type + count(const key_type& x) const; // (1) C++23 +constexpr size_type + count(const key_type& x) const; // (1) C++26 template -size_type count(const K& x) const; // (2) C++23 +size_type + count(const K& x) const; // (2) C++23 +template +constexpr size_type + count(const K& x) const; // (2) C++26 ``` ## 概要 @@ -96,3 +103,7 @@ int main() ## 関連項目 - [`contains()`](contains.md) + + +## 参照 +- [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/crbegin.md b/reference/flat_map/flat_multimap/crbegin.md index f8d67ddb08..40ef9e147e 100644 --- a/reference/flat_map/flat_multimap/crbegin.md +++ b/reference/flat_map/flat_multimap/crbegin.md @@ -6,7 +6,8 @@ * cpp23[meta cpp] ```cpp -const_reverse_iterator crbegin() const noexcept; +const_reverse_iterator crbegin() const noexcept; // (1) C++23 +constexpr const_reverse_iterator crbegin() const noexcept; // (1) C++26 ``` ## 概要 @@ -74,3 +75,7 @@ int main() | [`flat_multimap::rbegin`](rbegin.md) | 末尾を指す逆イテレータを取得する | | [`flat_multimap::rend`](rend.md) | 先頭の前を指す逆イテレータを取得する | | [`flat_multimap::crend`](crend.md) | 先頭の前を指す逆constイテレータを取得する | + + +## 参照 +- [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/crend.md b/reference/flat_map/flat_multimap/crend.md index 2a42c358c7..2d790bd1b2 100644 --- a/reference/flat_map/flat_multimap/crend.md +++ b/reference/flat_map/flat_multimap/crend.md @@ -6,7 +6,8 @@ * cpp23[meta cpp] ```cpp -const_reverse_iterator crend() const noexcept; +const_reverse_iterator crend() const noexcept; // (1) C++23 +constexpr const_reverse_iterator crend() const noexcept; // (1) C++26 ``` @@ -72,3 +73,7 @@ int main() | [`flat_multimap::rbegin`](rbegin.md) | 末尾を指す逆イテレータを取得する | | [`flat_multimap::rend`](rend.md) | 先頭の前を指す逆イテレータを取得する | | [`flat_multimap::crbegin`](crbegin.md) | 末尾を指す逆constイテレータを取得する | + + +## 参照 +- [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/emplace.md b/reference/flat_map/flat_multimap/emplace.md index e9ac1748aa..5ac4762315 100644 --- a/reference/flat_map/flat_multimap/emplace.md +++ b/reference/flat_map/flat_multimap/emplace.md @@ -7,7 +7,11 @@ ```cpp template -iterator emplace(Args&&... args); +iterator + emplace(Args&&... args); // (1) C++23 +template +constexpr iterator + emplace(Args&&... args); // (1) C++26 ``` ## 概要 @@ -76,3 +80,7 @@ int main() | [`flat_multimap::insert`](insert.md) | 要素を挿入する | | [`flat_multimap::insert_range`](insert_range.md) | Rangeを挿入する | | [`flat_multimap::emplace_hint`](emplace_hint.md) | ヒントを使って要素を直接構築する | + + +## 参照 +- [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/emplace_hint.md b/reference/flat_map/flat_multimap/emplace_hint.md index 019c1a2659..c3052a4f2b 100644 --- a/reference/flat_map/flat_multimap/emplace_hint.md +++ b/reference/flat_map/flat_multimap/emplace_hint.md @@ -7,7 +7,13 @@ ```cpp template -iterator emplace_hint(const_iterator hint, Args&&... args); +iterator + emplace_hint(const_iterator hint, + Args&&... args); // (1) C++23 +template +constexpr iterator + emplace_hint(const_iterator hint, + Args&&... args); // (1) C++26 ``` ## 概要 @@ -73,3 +79,7 @@ int main() | [`flat_multimap::insert`](insert.md) | 要素を挿入する | | [`flat_multimap::insert_range`](insert_range.md) | Rangeを挿入する | | [`flat_multimap::emplace`](emplace.md) | 要素を直接構築する | + + +## 参照 +- [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/empty.md b/reference/flat_map/flat_multimap/empty.md index a8e1573ab0..99f1119a38 100644 --- a/reference/flat_map/flat_multimap/empty.md +++ b/reference/flat_map/flat_multimap/empty.md @@ -6,7 +6,8 @@ * cpp23[meta cpp] ```cpp -[[nodiscard]] bool empty() const noexcept; // (1) C++23 +[[nodiscard]] bool empty() const noexcept; // (1) C++23 +[[nodiscard]] constexpr bool empty() const noexcept; // (1) C++26 ``` ## 概要 @@ -57,3 +58,7 @@ int main () - [Clang](/implementation.md#clang): ?? - [GCC](/implementation.md#gcc): ?? - [Visual C++](/implementation.md#visual_cpp): ?? + + +## 参照 +- [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/end.md b/reference/flat_map/flat_multimap/end.md index 142823285a..662abed141 100644 --- a/reference/flat_map/flat_multimap/end.md +++ b/reference/flat_map/flat_multimap/end.md @@ -6,8 +6,11 @@ * cpp23[meta cpp] ```cpp -iterator end() noexcept; -const_iterator end() const noexcept; +iterator end() noexcept; // (1) C++23 +constexpr iterator end() noexcept; // (1) C++26 + +const_iterator end() const noexcept; // (2) C++23 +constexpr const_iterator end() const noexcept; // (2) C++26 ``` ## 概要 @@ -78,3 +81,7 @@ int main() | [`flat_multimap::rend`](rend.md) | 先頭の前を指す逆イテレータを取得する | | [`flat_multimap::crbegin`](crbegin.md) | 末尾を指す逆constイテレータを取得する | | [`flat_multimap::crend`](crend.md) | 先頭の前を指す逆constイテレータを取得する | + + +## 参照 +- [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/equal_range.md b/reference/flat_map/flat_multimap/equal_range.md index 1d64f5a5ff..cae2bfb496 100644 --- a/reference/flat_map/flat_multimap/equal_range.md +++ b/reference/flat_map/flat_multimap/equal_range.md @@ -6,17 +6,29 @@ * cpp23[meta cpp] ```cpp -pair equal_range(const key_type& x); // (1) C++23 +pair + equal_range(const key_type& x); // (1) C++23 +constexpr pair + equal_range(const key_type& x); // (1) C++26 template -pair equal_range(const K& x); // (2) C++23 +pair + equal_range(const K& x); // (2) C++23 +template +constexpr pair + equal_range(const K& x); // (2) C++26 pair - equal_range(const key_type& x) const; // (3) C++23 + equal_range(const key_type& x) const; // (3) C++23 +constexpr pair + equal_range(const key_type& x) const; // (3) C++26 template pair - equal_range(const K& x) const; // (4) C++23 + equal_range(const K& x) const; // (4) C++23 +template +constexpr pair + equal_range(const K& x) const; // (4) C++26 ``` ## 概要 @@ -81,3 +93,7 @@ B, 4 | [`flat_multimap::lower_bound`](lower_bound.md) | 与えられた値より小さくない最初の要素へのイテレータを返す | | [`flat_multimap::upper_bound`](upper_bound.md) | 特定の値よりも大きい最初の要素へのイテレータを返す | | [`flat_multimap::find`](find.md) | 指定したキーで要素を探す | + + +## 参照 +- [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/erase.md b/reference/flat_map/flat_multimap/erase.md index 71c21413f6..9c96446c55 100644 --- a/reference/flat_map/flat_multimap/erase.md +++ b/reference/flat_map/flat_multimap/erase.md @@ -6,16 +6,22 @@ * cpp23[meta cpp] ```cpp -iterator erase(iterator position); // (1) C++23 +iterator erase(iterator position); // (1) C++23 +constexpr iterator erase(iterator position); // (1) C++26 -iterator erase(const_iterator position); // (2) C++23 +iterator erase(const_iterator position); // (2) C++23 +constexpr iterator erase(const_iterator position); // (2) C++26 -size_type erase(const key_type& x); // (3) C++23 +size_type erase(const key_type& x); // (3) C++23 +constexpr size_type erase(const key_type& x); // (3) C++26 template -size_type erase(K&& x); // (4) C++23 +size_type erase(K&& x); // (4) C++23 +template +constexpr size_type erase(K&& x); // (4) C++26 -iterator erase(const_iterator first, const_iterator last); // (5) C++23 +iterator erase(const_iterator first, const_iterator last); // (5) C++23 +constexpr iterator erase(const_iterator first, const_iterator last); // (5) C++26 ``` ## 概要 @@ -146,3 +152,7 @@ int main() | [`flat_multimap::clear`](clear.md) | 全ての要素を削除する | | [`flat_multimap::insert`](insert.md) | 要素を挿入する | | [`flat_multimap::find`](find.md) | 指定したキーで要素を探す | + + +## 参照 +- [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/erase_if_free.md b/reference/flat_map/flat_multimap/erase_if_free.md index 7ddafb2786..8aabf84ce7 100644 --- a/reference/flat_map/flat_multimap/erase_if_free.md +++ b/reference/flat_map/flat_multimap/erase_if_free.md @@ -14,7 +14,16 @@ namespace std { class Predicate> typename flat_multimap::size_type erase_if(flat_multimap& c, - Predicate pred); + Predicate pred); // (1) C++23 + template + constexpr typename flat_multimap::size_type + erase_if(flat_multimap& c, + Predicate pred); // (1) C++26 } ``` @@ -84,3 +93,7 @@ C : 5 - [Clang](/implementation.md#clang): ?? - [GCC](/implementation.md#gcc): ?? - [Visual C++](/implementation.md#visual_cpp): ?? + + +## 参照 +- [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/extract.md b/reference/flat_map/flat_multimap/extract.md index 2ca6df2a4e..d07ed38f8a 100644 --- a/reference/flat_map/flat_multimap/extract.md +++ b/reference/flat_map/flat_multimap/extract.md @@ -6,7 +6,8 @@ * cpp23[meta cpp] ```cpp -containers extract() &&; // C++23 +containers extract() &&; // (1) C++23 +constexpr containers extract() &&; // (1) C++26 ``` ## 概要 @@ -88,3 +89,7 @@ int main() ## 関連項目 - [`containers`](containers.md) + + +## 参照 +- [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/find.md b/reference/flat_map/flat_multimap/find.md index c5e14d6c59..400bd8d881 100644 --- a/reference/flat_map/flat_multimap/find.md +++ b/reference/flat_map/flat_multimap/find.md @@ -6,15 +6,21 @@ * cpp23[meta cpp] ```cpp -iterator find(const key_type& x); // (1) C++23 +iterator find(const key_type& x); // (1) C++23 +constexpr iterator find(const key_type& x); // (1) C++26 template -iterator find(const K& x); // (2) C++23 +iterator find(const K& x); // (2) C++23 +template +constexpr iterator find(const K& x); // (2) C++26 -const_iterator find(const key_type& x) const; // (3) C++23 +const_iterator find(const key_type& x) const; // (3) C++23 +constexpr const_iterator find(const key_type& x) const; // (3) C++26 template -const_iterator find(const K& x) const; // (4) C++23 +const_iterator find(const K& x) const; // (4) C++23 +template +constexpr const_iterator find(const K& x) const; // (4) C++26 ``` ## 概要 @@ -106,3 +112,7 @@ int main() ## 関連項目 - [`contains()`](contains.md) + + +## 参照 +- [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/insert.md b/reference/flat_map/flat_multimap/insert.md index db793d5aaa..1042663f49 100644 --- a/reference/flat_map/flat_multimap/insert.md +++ b/reference/flat_map/flat_multimap/insert.md @@ -6,34 +6,67 @@ * cpp23[meta cpp] ```cpp -iterator insert(const value_type& x); // (1) C++23 -iterator insert(value_type&& x); // (2) C++23 +iterator insert(const value_type& x); // (1) C++23 +constexpr iterator insert(const value_type& x); // (1) C++26 + +iterator insert(value_type&& x); // (2) C++23 +constexpr iterator insert(value_type&& x); // (2) C++26 iterator insert(const_iterator position, - const value_type& x); // (3) C++23 + const value_type& x); // (3) C++23 +constexpr iterator insert(const_iterator position, + const value_type& x); // (3) C++26 + iterator insert(const_iterator position, - value_type&& x); // (4) C++23 + value_type&& x); // (4) C++23 +constexpr iterator insert(const_iterator position, + value_type&& x); // (4) C++26 template -iterator insert(P&& x); // (5) C++23 +iterator insert(P&& x); // (5) C++23 +template +constexpr iterator insert(P&& x); // (5) C++26 template -iterator insert(const_iterator position, - P&&); // (6) C++23 +iterator + insert(const_iterator position, + P&&); // (6) C++23 +template +constexpr iterator + insert(const_iterator position, + P&&); // (6) C++26 template -void insert(InputIterator first, - InputIterator last); // (7) C++23 - +void + insert(InputIterator first, + InputIterator last); // (7) C++23 template -void insert(sorted_equivalent_t, - InputIterator first, - InputIterator last); // (8) C++23 +constexpr void + insert(InputIterator first, + InputIterator last); // (7) C++26 -void insert(initializer_list il); // (9) C++23 - -void insert(sorted_equivalent_t, - initializer_list il); // (10) C++23 +template +void + insert(sorted_equivalent_t, + InputIterator first, + InputIterator last); // (8) C++23 +template +constexpr void + insert(sorted_equivalent_t, + InputIterator first, + InputIterator last); // (8) C++26 + +void + insert(initializer_list il); // (9) C++23 +constexpr void + insert(initializer_list il); // (9) C++26 + +void + insert(sorted_equivalent_t, + initializer_list il); // (10) C++23 +constexpr void + insert(sorted_equivalent_t, + initializer_list il); // (10) C++26 ``` * initializer_list[link /reference/initializer_list/initializer_list.md] * sorted_equivalent_t[link /reference/flat_map/sorted_equivalent_t.md] @@ -225,3 +258,7 @@ int main() | [`flat_multimap::insert_range`](insert_range.md) | Rangeを挿入する | | [`flat_multimap::emplace`](emplace.md) | 要素を直接構築する | | [`flat_multimap::emplace_hint`](emplace_hint.md) | ヒントを使って要素を直接構築する | + + +## 参照 +- [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/insert_range.md b/reference/flat_map/flat_multimap/insert_range.md index c5ec738166..40801e5143 100644 --- a/reference/flat_map/flat_multimap/insert_range.md +++ b/reference/flat_map/flat_multimap/insert_range.md @@ -7,7 +7,9 @@ ```cpp template R> -void insert_range(R&& rg); // (1) C++23 +void insert_range(R&& rg); // (1) C++23 +template R> +constexpr void insert_range(R&& rg); // (1) C++26 ``` * container-compatible-range[link /reference/exposition-only/container-compatible-range.md] @@ -97,3 +99,7 @@ int main() | [`flat_multimap::insert`](insert.md) | 要素を挿入する | | [`flat_multimap::emplace`](emplace.md) | 要素を直接構築する | | [`flat_multimap::emplace_hint`](emplace_hint.md) | ヒントを使って要素を直接構築する | + + +## 参照 +- [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/key_comp.md b/reference/flat_map/flat_multimap/key_comp.md index a2d1dec6a0..787959f30d 100644 --- a/reference/flat_map/flat_multimap/key_comp.md +++ b/reference/flat_map/flat_multimap/key_comp.md @@ -6,7 +6,8 @@ * cpp23[meta cpp] ```cpp -key_compare key_comp() const; // C++23 +key_compare key_comp() const; // (1) C++23 +constexpr key_compare key_comp() const; // (1) C++26 ``` @@ -63,3 +64,7 @@ int main() |-------------------------------------|----------------------------------------------------------| | [`value_comp`](value_comp.md) | 要素比較用の関数オブジェクトを返す | | [`value_compare`](value_compare.md) | 要素値のキー部分で大小関係を判定する二項述語の型 | + + +## 参照 +- [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/key_equiv.md b/reference/flat_map/flat_multimap/key_equiv.md index ef9b3a7650..be86e5f1c6 100644 --- a/reference/flat_map/flat_multimap/key_equiv.md +++ b/reference/flat_map/flat_multimap/key_equiv.md @@ -7,11 +7,18 @@ ```cpp struct key_equiv { - key_equiv(key_compare c) : comp(c) { } + key_equiv(key_compare c) : comp(c) { } // (1) C++23 +constexpr + key_equiv(key_compare c) : comp(c) { } // (1) C++26 - bool operator()(const_reference x, const_reference y) const { - return !comp(x.first, y.first) && !comp(y.first, x.first); - } + bool + operator()(const_reference x, const_reference y) const { // (2) C++23 + return !comp(x.first, y.first) && !comp(y.first, x.first); + } + constexpr bool + operator()(const_reference x, const_reference y) const { // (2) C++26 + return !comp(x.first, y.first) && !comp(y.first, x.first); + } key_compare comp; }; @@ -29,3 +36,7 @@ struct key_equiv { - [Clang](/implementation.md#clang): ?? - [GCC](/implementation.md#gcc): ?? - [Visual C++](/implementation.md#visual_cpp): ?? + + +## 参照 +- [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/keys.md b/reference/flat_map/flat_multimap/keys.md index 5855b4c3d3..f367f12d17 100644 --- a/reference/flat_map/flat_multimap/keys.md +++ b/reference/flat_map/flat_multimap/keys.md @@ -6,7 +6,8 @@ * cpp23[meta cpp] ```cpp -const key_container_type& keys() const noexcept; // C++23 +const key_container_type& keys() const noexcept; // (1) C++23 +constexpr const key_container_type& keys() const noexcept; // (1) C++26 ``` ## 概要 @@ -68,3 +69,7 @@ int main() | 名前 | 説明 | |----------------------------------------|-------------------------------------------| | [`flat_multimap::values`](values.md) | 値のコンテナを取得する | + + +## 参照 +- [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/lower_bound.md b/reference/flat_map/flat_multimap/lower_bound.md index 3b5fe85171..c500443197 100644 --- a/reference/flat_map/flat_multimap/lower_bound.md +++ b/reference/flat_map/flat_multimap/lower_bound.md @@ -6,15 +6,21 @@ * cpp23[meta cpp] ```cpp -iterator lower_bound(const key_type& x); // (1) C++23 +iterator lower_bound(const key_type& x); // (1) C++23 +constexpr iterator lower_bound(const key_type& x); // (1) C++26 template -iterator lower_bound(const K& x); // (2) C++23 +iterator lower_bound(const K& x); // (2) C++23 +template +constexpr iterator lower_bound(const K& x); // (2) C++26 -const_iterator lower_bound(const key_type& x) const; // (3) C++23 +const_iterator lower_bound(const key_type& x) const; // (3) C++23 +constexpr const_iterator lower_bound(const key_type& x) const; // (3) C++26 template -const_iterator lower_bound(const K& x) const; // (4) C++23 +const_iterator lower_bound(const K& x) const; // (4) C++23 +template +constexpr const_iterator lower_bound(const K& x) const; // (4) C++26 ``` ## 概要 @@ -116,3 +122,7 @@ D,5 | [`equal_range`](equal_range.md) | 指定したキーにマッチする要素範囲を返す | | [`find`](find.md) | 指定したキーで要素を探す | | [`count`](count.md) | 指定したキーにマッチする要素の数を返す | + + +## 参照 +- [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/max_size.md b/reference/flat_map/flat_multimap/max_size.md index a2d09ba997..42657b6200 100644 --- a/reference/flat_map/flat_multimap/max_size.md +++ b/reference/flat_map/flat_multimap/max_size.md @@ -6,7 +6,8 @@ * cpp23[meta cpp] ```cpp -size_type max_size() const noexcept; // (1) C++23 +size_type max_size() const noexcept; // (1) C++23 +constexpr size_type max_size() const noexcept; // (1) C++26 ``` ## 概要 @@ -54,3 +55,7 @@ int main() - [Clang](/implementation.md#clang): ?? - [GCC](/implementation.md#gcc): ?? - [Visual C++](/implementation.md#visual_cpp): ?? + + +## 参照 +- [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_assign.md b/reference/flat_map/flat_multimap/op_assign.md index 6d2075467d..643577f14e 100644 --- a/reference/flat_map/flat_multimap/op_assign.md +++ b/reference/flat_map/flat_multimap/op_assign.md @@ -6,7 +6,8 @@ * cpp23[meta cpp] ```cpp -flat_multimap& operator=(initializer_list il); // C++23 +flat_multimap& operator=(initializer_list il); // (1) C++23 +constexpr flat_multimap& operator=(initializer_list il); // (1) C++26 ``` * initializer_list[link /reference/initializer_list/initializer_list.md] @@ -74,3 +75,7 @@ int main() - [GCC](/implementation.md#gcc): ?? - [ICC](/implementation.md#icc): ?? - [Visual C++](/implementation.md#visual_cpp): ?? + + +## 参照 +- [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_compare_3way.md b/reference/flat_map/flat_multimap/op_compare_3way.md index 3110df6da4..84bd459222 100644 --- a/reference/flat_map/flat_multimap/op_compare_3way.md +++ b/reference/flat_map/flat_multimap/op_compare_3way.md @@ -9,6 +9,9 @@ synth-three-way-result operator<=>(const flat_multimap& x, const flat_multimap& y); // (1) C++23 +constexpr synth-three-way-result + operator<=>(const flat_multimap& x, + const flat_multimap& y); // (1) C++26 ``` ## 概要 @@ -87,3 +90,7 @@ false - [Clang](/implementation.md#clang): ?? - [GCC](/implementation.md#gcc): ?? - [Visual C++](/implementation.md#visual_cpp): ?? + + +## 参照 +- [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 dce58a13d1..caa19381ac 100644 --- a/reference/flat_map/flat_multimap/op_constructor.md +++ b/reference/flat_map/flat_multimap/op_constructor.md @@ -8,118 +8,291 @@ ```cpp // ____要素数ゼロのflat_multimapを構築____ -flat_multimap() : flat_multimap(key_compare()) { } // (1) C++23 +flat_multimap() + : flat_multimap(key_compare()) { } // (1) C++23 -explicit flat_multimap(const key_compare& comp) // (2) C++23 - : c(), compare(comp) { } +explicit + flat_multimap(const key_compare& comp) // (2) C++23 + : c(), compare(comp) { } +constexpr explicit + flat_multimap(const key_compare& comp) // (2) C++26 + : c(), compare(comp) { } template -explicit flat_multimap(const Allocator& a); // (3) C++23 +explicit + flat_multimap(const Allocator& a); // (3) C++23 +template +constexpr explicit + flat_multimap(const Allocator& a); // (3) C++26 template -flat_multimap(const key_compare& comp, const Allocator& a); // (4) C++23 +flat_multimap(const key_compare& comp, + const Allocator& a); // (4) C++23 +template +constexpr + flat_multimap(const key_compare& comp, + const Allocator& a); // (4) C++26 // ____アロケータを伴うコピー&ムーブコンストラクタ____ template - flat_multimap(const flat_multimap& x, const Allocator& a); // (5) C++26 + constexpr + flat_multimap(const flat_multimap& x, + const Allocator& a); // (5) C++26 template - flat_multimap(flat_multimap&& x, const Allocator& a); // (6) C++26 + constexpr + flat_multimap(flat_multimap&& x, + const Allocator& a); // (6) C++26 // ____key_container_typeとmapped_container_typeから構築____ -flat_multimap(key_container_type key_cont, mapped_container_type mapped_cont, - const key_compare& comp = key_compare()); // (7) C++23 +flat_multimap(key_container_type key_cont, + mapped_container_type mapped_cont, + const key_compare& comp = key_compare()); // (7) C++23 +constexpr + flat_multimap(key_container_type key_cont, + mapped_container_type mapped_cont, + const key_compare& comp = key_compare()); // (7) C++26 template -flat_multimap(const key_container_type& key_cont, const mapped_container_type& mapped_cont, - const Allocator& a); // (8) C++23 +flat_multimap(const key_container_type& key_cont, + const mapped_container_type& mapped_cont, + const Allocator& a); // (8) C++23 +template +constexpr + flat_multimap(const key_container_type& key_cont, + const mapped_container_type& mapped_cont, + const Allocator& a); // (8) C++26 template -flat_multimap(const key_container_type& key_cont, const mapped_container_type& mapped_cont, - const key_compare& comp, const Allocator& a); // (9) C++23 +flat_multimap(const key_container_type& key_cont, + const mapped_container_type& mapped_cont, + const key_compare& comp, + const Allocator& a); // (9) C++23 +template +constexpr + flat_multimap(const key_container_type& key_cont, + const mapped_container_type& mapped_cont, + const key_compare& comp, + const Allocator& a); // (9) C++26 // ____key_container_typeとmapped_container_type(共にソート済み)から構築____ -flat_multimap(sorted_equivalent_t, key_container_type key_cont, mapped_container_type mapped_cont, - const key_compare& comp = key_compare()); // (10) C++23 +flat_multimap(sorted_equivalent_t, + key_container_type key_cont, + mapped_container_type mapped_cont, + const key_compare& comp = key_compare()); // (10) C++23 +constexpr + flat_multimap(sorted_equivalent_t, + key_container_type key_cont, + mapped_container_type mapped_cont, + const key_compare& comp = key_compare()); // (10) C++26 template -flat_multimap(sorted_equivalent_t, const key_container_type& key_cont, - const mapped_container_type& mapped_cont, const Allocator& a); // (11) C++23 +flat_multimap(sorted_equivalent_t, + const key_container_type& key_cont, + const mapped_container_type& mapped_cont, + const Allocator& a); // (11) C++23 +template +constexpr + flat_multimap(sorted_equivalent_t, + const key_container_type& key_cont, + const mapped_container_type& mapped_cont, + const Allocator& a); // (11) C++26 template -flat_multimap(sorted_equivalent_t, const key_container_type& key_cont, +flat_multimap(sorted_equivalent_t, + const key_container_type& key_cont, const mapped_container_type& mapped_cont, - const key_compare& comp, const Allocator& a); // (12) C++23 + const key_compare& comp, + const Allocator& a); // (12) C++23 +template +constexpr + flat_multimap(sorted_equivalent_t, + const key_container_type& key_cont, + const mapped_container_type& mapped_cont, + const key_compare& comp, + const Allocator& a); // (12) C++26 // ____イテレータから構築____ - template -flat_multimap(InputIterator first, InputIterator last, const key_compare& comp = key_compare()) // (13) C++23 +flat_multimap(InputIterator first, + InputIterator last, + const key_compare& comp = key_compare()) // (13) C++23 : c(), compare(comp) { insert(first, last); } +template +constexpr + flat_multimap(InputIterator first, + InputIterator last, + const key_compare& comp = key_compare()) // (13) C++26 + : c(), compare(comp) { insert(first, last); } template -flat_multimap(InputIterator first, InputIterator last, const Allocator& a); // (14) C++23 +flat_multimap(InputIterator first, + InputIterator last, + const Allocator& a); // (14) C++23 +template +constexpr + flat_multimap(InputIterator first, + InputIterator last, + const Allocator& a); // (14) C++26 template -flat_multimap(InputIterator first, InputIterator last, - const key_compare& comp, const Allocator& a); // (15) C++23 +flat_multimap(InputIterator first, + InputIterator last, + const key_compare& comp, + const Allocator& a); // (15) C++23 +template +constexpr + flat_multimap(InputIterator first, + InputIterator last, + const key_compare& comp, + const Allocator& a); // (15) C++26 // ____イテレータ(ソート済み)から構築____ - template -flat_multimap(sorted_equivalent_t s, InputIterator first, InputIterator last, - const key_compare& comp = key_compare()) // (16) C++23 +flat_multimap(sorted_equivalent_t s, + InputIterator first, + InputIterator last, + const key_compare& comp = key_compare()) // (16) C++23 : c(), compare(comp) { insert(s, first, last); } +template +constexpr + flat_multimap(sorted_equivalent_t s, + InputIterator first, + InputIterator last, + const key_compare& comp = key_compare()) // (16) C++26 + : c(), compare(comp) { insert(s, first, last); } template -flat_multimap(sorted_equivalent_t, InputIterator first, InputIterator last, const Allocator& a); // (17) C++23 +flat_multimap(sorted_equivalent_t, + InputIterator first, + InputIterator last, + const Allocator& a); // (17) C++23 +template +constexpr + flat_multimap(sorted_equivalent_t, + InputIterator first, + InputIterator last, + const Allocator& a); // (17) C++26 template -flat_multimap(sorted_equivalent_t, InputIterator first, InputIterator last, - const key_compare& comp, const Allocator& a); // (18) C++23 +flat_multimap(sorted_equivalent_t, + InputIterator first, + InputIterator last, + const key_compare& comp, + const Allocator& a); // (18) C++23 + template +constexpr + flat_multimap(sorted_equivalent_t, + InputIterator first, + InputIterator last, + const key_compare& comp, + const Allocator& a); // (18) C++26 // ____Rangeから構築____ - template R> -flat_multimap(from_range_t fr, R&& rg) // (19) C++23 +flat_multimap(from_range_t fr, + R&& rg) // (19) C++23 : flat_multimap(fr, forward(rg), key_compare()) { } +template R> +constexpr + flat_multimap(from_range_t fr, + R&& rg) // (19) C++26 + : flat_multimap(fr, forward(rg), key_compare()) { } template R> -flat_multimap(from_range_t, R&& rg, const key_compare& comp) // (20) C++23 +flat_multimap(from_range_t, + R&& rg, + const key_compare& comp) // (20) C++23 : flat_multimap(comp) { insert_range(forward(rg)); } +template R> +constexpr + flat_multimap(from_range_t, + R&& rg, + const key_compare& comp) // (20) C++26 + : flat_multimap(comp) { insert_range(forward(rg)); } template R, class Allocator> -flat_multimap(from_range_t, R&& rg, const Allocator& a); // (21) C++23 +flat_multimap(from_range_t, + R&& rg, + const Allocator& a); // (21) C++23 +template R, class Allocator> +constexpr + flat_multimap(from_range_t, + R&& rg, + const Allocator& a); // (21) C++26 template R, class Allocator> -flat_multimap(from_range_t, R&& rg, const key_compare& comp, const Allocator& a); // (22) C++23 +flat_multimap(from_range_t, + R&& rg, + const key_compare& comp, + const Allocator& a); // (22) C++23 +template R, class Allocator> +constexpr + flat_multimap(from_range_t, + R&& rg, + const key_compare& comp, + const Allocator& a); // (22) C++26 // ____initializer_listから構築____ - -flat_multimap(initializer_list il, const key_compare& comp = key_compare()) // (23) C++23 +flat_multimap(initializer_list il, + const key_compare& comp = key_compare()) // (23) C++23 : flat_multimap(il.begin(), il.end(), comp) { } +constexpr + flat_multimap(initializer_list il, + const key_compare& comp = key_compare()) // (23) C++26 + : flat_multimap(il.begin(), il.end(), comp) { } template -flat_multimap(initializer_list il, const Allocator& a); // (24) C++23 +flat_multimap(initializer_list il, + const Allocator& a); // (24) C++23 +template +constexpr + flat_multimap(initializer_list il, + const Allocator& a); // (24) C++26 template -flat_multimap(initializer_list il, const key_compare& comp, const Allocator& a); // (25) C++23 +flat_multimap(initializer_list il, + const key_compare& comp, + const Allocator& a); // (25) C++23 +template +constexpr + flat_multimap(initializer_list il, + const key_compare& comp, + const Allocator& a); // (25) C++26 // ____initializer_list(ソート済み)から構築____ - -flat_multimap(sorted_equivalent_t s, initializer_list il, - const key_compare& comp = key_compare()) // (26) C++23 +flat_multimap(sorted_equivalent_t s, + initializer_list il, + const key_compare& comp = key_compare()) // (26) C++23 + : flat_multimap(s, il.begin(), il.end(), comp) { } +constexpr + flat_multimap(sorted_equivalent_t s, + initializer_list il, + const key_compare& comp = key_compare()) // (26) C++26 : flat_multimap(s, il.begin(), il.end(), comp) { } template -flat_multimap(sorted_equivalent_t, initializer_list il, const Allocator& a); // (27) C++23 +flat_multimap(sorted_equivalent_t, + initializer_list il, + const Allocator& a); // (27) C++23 +template +constexpr + flat_multimap(sorted_equivalent_t, + initializer_list il, + const Allocator& a); // (27) C++26 template -flat_multimap(sorted_equivalent_t, initializer_list il, - const key_compare& comp, const Allocator& a); // (28) C++23 +flat_multimap(sorted_equivalent_t, + initializer_list il, + const key_compare& comp, const Allocator& a); // (28) C++23 +template +constexpr + flat_multimap(sorted_equivalent_t, + initializer_list il, + const key_compare& comp, const Allocator& a); // (28) C++26 ``` * initializer_list[link /reference/initializer_list/initializer_list.md] * from_range_t[link ../../ranges/from_range_t.md] @@ -269,3 +442,7 @@ int main() | 名前 | 説明 | |---------------------------------------|--------------------------------------------| | [`uses_allocator`](uses_allocator.md) | 指定されたアロケータと合致するかをチェックする | + + +## 参照 +- [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_equal.md b/reference/flat_map/flat_multimap/op_equal.md index f987410bc5..67033bb19c 100644 --- a/reference/flat_map/flat_multimap/op_equal.md +++ b/reference/flat_map/flat_multimap/op_equal.md @@ -6,7 +6,8 @@ * cpp23[meta cpp] ```cpp -friend bool operator==(const flat_multimap& x, const flat_multimap& y); +friend bool operator==(const flat_multimap& x, const flat_multimap& y); // (1) C++23 +constexpr friend bool operator==(const flat_multimap& x, const flat_multimap& y); // (1) C++26 ``` ## 概要 @@ -71,3 +72,7 @@ true - [Clang](/implementation.md#clang): ?? - [GCC](/implementation.md#gcc): ?? - [Visual C++](/implementation.md#visual_cpp): ?? + + +## 参照 +- [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/rbegin.md b/reference/flat_map/flat_multimap/rbegin.md index ec5ae422e1..e0f93247f5 100644 --- a/reference/flat_map/flat_multimap/rbegin.md +++ b/reference/flat_map/flat_multimap/rbegin.md @@ -6,8 +6,11 @@ * cpp23[meta cpp] ```cpp -reverse_iterator rbegin() noexcept; -const_reverse_iterator rbegin() const noexcept; +reverse_iterator rbegin() noexcept; // (1) C++23 +constexpr reverse_iterator rbegin() noexcept; // (1) C++26 + +const_reverse_iterator rbegin() const noexcept; // (2) C++23 +constexpr const_reverse_iterator rbegin() const noexcept; // (2) C++26 ``` ## 概要 @@ -77,3 +80,7 @@ int main() | [`flat_multimap::rend`](rend.md) | 先頭の前を指す逆イテレータを取得する | | [`flat_multimap::crbegin`](crbegin.md) | 末尾を指す逆constイテレータを取得する | | [`flat_multimap::crend`](crend.md) | 先頭の前を指す逆constイテレータを取得する | + + +## 参照 +- [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/rend.md b/reference/flat_map/flat_multimap/rend.md index d9c3711006..a6b53eccb2 100644 --- a/reference/flat_map/flat_multimap/rend.md +++ b/reference/flat_map/flat_multimap/rend.md @@ -6,8 +6,11 @@ * cpp23[meta cpp] ```cpp -reverse_iterator rend() noexcept; -const_reverse_iterator rend() const noexcept; +reverse_iterator rend() noexcept; // (1) C++23 +constexpr reverse_iterator rend() noexcept; // (1) C++26 + +const_reverse_iterator rend() const noexcept; // (2) C++23 +constexpr const_reverse_iterator rend() const noexcept; // (2) C++26 ``` ## 概要 @@ -70,3 +73,7 @@ int main() | [`flat_multimap::rbegin`](rbegin.md) | 末尾を指す逆イテレータを取得する | | [`flat_multimap::crbegin`](crbegin.md) | 末尾を指す逆constイテレータを取得する | | [`flat_multimap::crend`](crend.md) | 先頭の前を指す逆constイテレータを取得する | + + +## 参照 +- [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/replace.md b/reference/flat_map/flat_multimap/replace.md index 48b5889d81..0727199931 100644 --- a/reference/flat_map/flat_multimap/replace.md +++ b/reference/flat_map/flat_multimap/replace.md @@ -6,7 +6,12 @@ * cpp23[meta cpp] ```cpp -void replace(key_container_type&& key_cont, mapped_container_type&& mapped_cont); // C++23 +void + replace(key_container_type&& key_cont, + mapped_container_type&& mapped_cont); // (1) C++23 +constexpr void + replace(key_container_type&& key_cont, + mapped_container_type&& mapped_cont); // (1) C++26 ``` ## 概要 @@ -89,3 +94,7 @@ int main() - [GCC](/implementation.md#gcc): ?? - [ICC](/implementation.md#icc): ?? - [Visual C++](/implementation.md#visual_cpp): ?? + + +## 参照 +- [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/size.md b/reference/flat_map/flat_multimap/size.md index 4c3e67b877..177ef1bbb5 100644 --- a/reference/flat_map/flat_multimap/size.md +++ b/reference/flat_map/flat_multimap/size.md @@ -6,7 +6,8 @@ * cpp23[meta cpp] ```cpp -size_type size() const noexcept; +size_type size() const noexcept; // (1) C++23 +constexpr size_type size() const noexcept; // (1) C++26 ``` ## 概要 @@ -67,3 +68,7 @@ int main () ## 関連項目 - [`empty()`](empty.md) + + +## 参照 +- [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/swap.md b/reference/flat_map/flat_multimap/swap.md index 44600a8e46..18f86609a2 100644 --- a/reference/flat_map/flat_multimap/swap.md +++ b/reference/flat_map/flat_multimap/swap.md @@ -6,7 +6,8 @@ * cpp23[meta cpp] ```cpp -void swap(flat_multimap& y) noexcept; // (1) C++23 +void swap(flat_multimap& y) noexcept; // (1) C++23 +constexpr void swap(flat_multimap& y) noexcept; // (1) C++26 ``` ## 概要 @@ -79,3 +80,7 @@ fm2 : {[10,a], [20,b], [30,c]} - [Clang](/implementation.md#clang): ?? - [GCC](/implementation.md#gcc): ?? - [Visual C++](/implementation.md#visual_cpp): ?? + + +## 参照 +- [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/swap_free.md b/reference/flat_map/flat_multimap/swap_free.md index 84e6fba2d6..7dbc1bda72 100644 --- a/reference/flat_map/flat_multimap/swap_free.md +++ b/reference/flat_map/flat_multimap/swap_free.md @@ -6,9 +6,14 @@ ```cpp namespace std { - template - void swap(flat_multimap& x, - flat_multimap& y); // (1) C++23 + template + void + swap(flat_multimap& x, + flat_multimap& y); // (1) C++23 + template + constexpr void + swap(flat_multimap& x, + flat_multimap& y); // (1) C++26 } ``` @@ -81,3 +86,7 @@ fm2 : {[10,a], [20,b], [30,c]} - [Clang](/implementation.md#clang): ?? - [GCC](/implementation.md#gcc): ?? - [Visual C++](/implementation.md#visual_cpp): ?? + + +## 参照 +- [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/upper_bound.md b/reference/flat_map/flat_multimap/upper_bound.md index 768e42216a..7c7511fe6a 100644 --- a/reference/flat_map/flat_multimap/upper_bound.md +++ b/reference/flat_map/flat_multimap/upper_bound.md @@ -6,15 +6,21 @@ * cpp23[meta cpp] ```cpp -iterator upper_bound(const key_type& x); // (1) C++23 +iterator upper_bound(const key_type& x); // (1) C++23 +constexpr iterator upper_bound(const key_type& x); // (1) C++26 template -iterator upper_bound(const K& x); // (2) C++23 +iterator upper_bound(const K& x); // (2) C++23 +template +constexpr iterator upper_bound(const K& x); // (2) C++26 -const_iterator upper_bound(const key_type& x) const; // (3) C++23 +const_iterator upper_bound(const key_type& x) const; // (3) C++23 +constexpr const_iterator upper_bound(const key_type& x) const; // (3) C++26 template -const_iterator upper_bound(const K& x) const; // (4) C++23 +const_iterator upper_bound(const K& x) const; // (4) C++23 +template +constexpr const_iterator upper_bound(const K& x) const; // (4) C++26 ``` ## 概要 @@ -116,3 +122,7 @@ D,5 | [`equal_range`](equal_range.md) | 指定したキーにマッチする要素範囲を返す | | [`find`](find.md) | 指定したキーで要素を探す | | [`count`](count.md) | 指定したキーにマッチする要素の数を返す | + + +## 参照 +- [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/value_comp.md b/reference/flat_map/flat_multimap/value_comp.md index 7894907123..943118136d 100644 --- a/reference/flat_map/flat_multimap/value_comp.md +++ b/reference/flat_map/flat_multimap/value_comp.md @@ -6,7 +6,8 @@ * cpp23[meta cpp] ```cpp -value_compare value_comp() const; // C++23 +value_compare value_comp() const; // (1) C++23 +constexpr value_compare value_comp() const; // (1) C++26 ``` @@ -70,3 +71,7 @@ int main() |-------------------------------------|----------------------------------------------------------| | [`key_comp`](key_comp.md) | キー比較用の関数オブジェクトを取得する | | [`value_compare`](value_compare.md) | 要素値のキー部分で大小関係を判定する二項述語の型 | + + +## 参照 +- [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/values.md b/reference/flat_map/flat_multimap/values.md index bb7ee26695..c03c3ab9d7 100644 --- a/reference/flat_map/flat_multimap/values.md +++ b/reference/flat_map/flat_multimap/values.md @@ -6,7 +6,8 @@ * cpp23[meta cpp] ```cpp -const mapped_container_type& values() const noexcept; // C++23 +const mapped_container_type& values() const noexcept; // (1) C++23 +constexpr const mapped_container_type& values() const noexcept; // (1) C++26 ``` ## 概要 @@ -68,3 +69,7 @@ C | 名前 | 説明 | |-------------------------------|-------------------------------------------| | [`flat_multimap::keys`](keys.md) | キーのコンテナを取得する | + + +## 参照 +- [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/begin.md b/reference/flat_set/flat_multiset/begin.md index 1db00e406d..c34dff3681 100644 --- a/reference/flat_set/flat_multiset/begin.md +++ b/reference/flat_set/flat_multiset/begin.md @@ -6,8 +6,11 @@ * cpp23[meta cpp] ```cpp -iterator begin() noexcept; -const_iterator begin() const noexcept; +iterator begin() noexcept; // (1) C++23 +constexpr iterator begin() noexcept; // (1) C++26 + +const_iterator begin() const noexcept; // (2) C++23 +constexpr const_iterator begin() const noexcept; // (2) C++26 ``` @@ -72,3 +75,7 @@ int main() | [`flat_multiset::rend`](rend.md) | 先頭の前を指す逆イテレータを取得する | | [`flat_multiset::crbegin`](crbegin.md) | 末尾を指す逆constイテレータを取得する | | [`flat_multiset::crend`](crend.md) | 先頭の前を指す逆constイテレータを取得する | + + +## 参照 +- [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/cbegin.md b/reference/flat_set/flat_multiset/cbegin.md index 31da02d40f..387135acfd 100644 --- a/reference/flat_set/flat_multiset/cbegin.md +++ b/reference/flat_set/flat_multiset/cbegin.md @@ -6,7 +6,8 @@ * cpp23[meta cpp] ```cpp -const_iterator cbegin() const noexcept; +const_iterator cbegin() const noexcept; // (1) C++23 +constexpr const_iterator cbegin() const noexcept; // (1) C++26 ``` @@ -68,3 +69,7 @@ int main() | [`flat_multiset::rend`](rend.md) | 先頭の前を指す逆イテレータを取得する | | [`flat_multiset::crbegin`](crbegin.md) | 末尾を指す逆constイテレータを取得する | | [`flat_multiset::crend`](crend.md) | 先頭の前を指す逆constイテレータを取得する | + + +## 参照 +- [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/cend.md b/reference/flat_set/flat_multiset/cend.md index da44495731..0735dea041 100644 --- a/reference/flat_set/flat_multiset/cend.md +++ b/reference/flat_set/flat_multiset/cend.md @@ -6,7 +6,8 @@ * cpp23[meta cpp] ```cpp -const_iterator cend() const noexcept; +const_iterator cend() const noexcept; // (1) C++23 +constexpr const_iterator cend() const noexcept; // (1) C++26 ``` ## 概要 @@ -71,3 +72,7 @@ int main() | [`flat_multiset::rend`](rend.md) | 先頭の前を指す逆イテレータを取得する | | [`flat_multiset::crbegin`](crbegin.md) | 末尾を指す逆constイテレータを取得する | | [`flat_multiset::crend`](crend.md) | 先頭の前を指す逆constイテレータを取得する | + + +## 参照 +- [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/clear.md b/reference/flat_set/flat_multiset/clear.md index d935fd497e..d636fb9ce2 100644 --- a/reference/flat_set/flat_multiset/clear.md +++ b/reference/flat_set/flat_multiset/clear.md @@ -6,7 +6,8 @@ * cpp23[meta cpp] ```cpp -void clear() noexcept; // (1) C++23 +void clear() noexcept; // (1) C++23 +constexpr void clear() noexcept; // (1) C++26 ``` ## 概要 @@ -54,3 +55,7 @@ int main () - [Clang](/implementation.md#clang): ?? - [GCC](/implementation.md#gcc): ?? - [Visual C++](/implementation.md#visual_cpp): ?? + + +## 参照 +- [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/contains.md b/reference/flat_set/flat_multiset/contains.md index 3bc4296001..e8c821053c 100644 --- a/reference/flat_set/flat_multiset/contains.md +++ b/reference/flat_set/flat_multiset/contains.md @@ -6,10 +6,13 @@ * cpp23[meta cpp] ```cpp -bool contains(const key_type& x) const; // (1) C++23 +bool contains(const key_type& x) const; // (1) C++23 +constexpr bool contains(const key_type& x) const; // (1) C++26 template -bool contains(const K& x) const; // (2) C++23 +bool contains(const K& x) const; // (2) C++23 +template +constexpr bool contains(const K& x) const; // (2) C++26 ``` @@ -78,3 +81,7 @@ contain - [Clang](/implementation.md#clang): ?? - [GCC](/implementation.md#gcc): ?? - [Visual C++](/implementation.md#visual_cpp): ?? + + +## 参照 +- [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/count.md b/reference/flat_set/flat_multiset/count.md index c605ea333d..ad3a3dd88c 100644 --- a/reference/flat_set/flat_multiset/count.md +++ b/reference/flat_set/flat_multiset/count.md @@ -6,10 +6,13 @@ * cpp23[meta cpp] ```cpp -size_type count(const key_type& x) const; // (1) C++23 +size_type count(const key_type& x) const; // (1) C++23 +constexpr size_type count(const key_type& x) const; // (1) C++26 template -size_type count(const K& x) const; // (2) C++23 +size_type count(const K& x) const; // (2) C++23 +template +constexpr size_type count(const K& x) const; // (2) C++26 ``` ## 概要 @@ -88,3 +91,7 @@ int main() ## 関連項目 - [`contains()`](contains.md) + + +## 参照 +- [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/crbegin.md b/reference/flat_set/flat_multiset/crbegin.md index 769fb3b2d4..928edf122c 100644 --- a/reference/flat_set/flat_multiset/crbegin.md +++ b/reference/flat_set/flat_multiset/crbegin.md @@ -6,7 +6,8 @@ * cpp23[meta cpp] ```cpp -const_reverse_iterator crbegin() const noexcept; +const_reverse_iterator crbegin() const noexcept; // (1) C++23 +constexpr const_reverse_iterator crbegin() const noexcept; // (1) C++26 ``` ## 概要 @@ -69,3 +70,7 @@ int main() | [`flat_multiset::rbegin`](rbegin.md) | 末尾を指す逆イテレータを取得する | | [`flat_multiset::rend`](rend.md) | 先頭の前を指す逆イテレータを取得する | | [`flat_multiset::crend`](crend.md) | 先頭の前を指す逆constイテレータを取得する | + + +## 参照 +- [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/crend.md b/reference/flat_set/flat_multiset/crend.md index 01cd3265be..e0d9df8206 100644 --- a/reference/flat_set/flat_multiset/crend.md +++ b/reference/flat_set/flat_multiset/crend.md @@ -6,7 +6,8 @@ * cpp23[meta cpp] ```cpp -const_reverse_iterator crend() const noexcept; +const_reverse_iterator crend() const noexcept; // (1) C++23 +constexpr const_reverse_iterator crend() const noexcept; // (1) C++26 ``` @@ -67,3 +68,7 @@ int main() | [`flat_multiset::rbegin`](rbegin.md) | 末尾を指す逆イテレータを取得する | | [`flat_multiset::rend`](rend.md) | 先頭の前を指す逆イテレータを取得する | | [`flat_multiset::crbegin`](crbegin.md) | 末尾を指す逆constイテレータを取得する | + + +## 参照 +- [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/emplace.md b/reference/flat_set/flat_multiset/emplace.md index 49c04e5e44..65360bae56 100644 --- a/reference/flat_set/flat_multiset/emplace.md +++ b/reference/flat_set/flat_multiset/emplace.md @@ -7,7 +7,9 @@ ```cpp template -iterator emplace(Args&&... args); +iterator emplace(Args&&... args); // (1) C++23 +template +constexpr iterator emplace(Args&&... args); // (1) C++26 ``` ## 概要 @@ -108,3 +110,7 @@ CCCCC | [`flat_multiset::insert`](insert.md) | 要素を挿入する | | [`flat_multiset::insert_range`](insert_range.md) | Rangeを挿入する | | [`flat_multiset::emplace_hint`](emplace_hint.md) | ヒントを使って要素を直接構築する | + + +## 参照 +- [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/emplace_hint.md b/reference/flat_set/flat_multiset/emplace_hint.md index 46e96497cf..ee98d6c214 100644 --- a/reference/flat_set/flat_multiset/emplace_hint.md +++ b/reference/flat_set/flat_multiset/emplace_hint.md @@ -7,7 +7,13 @@ ```cpp template -iterator emplace_hint(const_iterator hint, Args&&... args); +iterator + emplace_hint(const_iterator hint, + Args&&... args); // (1) C++23 +template +constexpr iterator + emplace_hint(const_iterator hint, + Args&&... args); // (1) C++26 ``` ## 概要 @@ -72,3 +78,7 @@ int main() | [`flat_multiset::insert`](insert.md) | 要素を挿入する | | [`flat_multiset::insert_range`](insert_range.md) | Rangeを挿入する | | [`flat_multiset::emplace`](emplace.md) | 要素を直接構築する | + + +## 参照 +- [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/empty.md b/reference/flat_set/flat_multiset/empty.md index df552ef67a..baee8668a0 100644 --- a/reference/flat_set/flat_multiset/empty.md +++ b/reference/flat_set/flat_multiset/empty.md @@ -6,7 +6,8 @@ * cpp23[meta cpp] ```cpp -[[nodiscard]] bool empty() const noexcept; // (1) C++23 +[[nodiscard]] bool empty() const noexcept; // (1) C++23 +[[nodiscard]] constexpr bool empty() const noexcept; // (1) C++26 ``` ## 概要 @@ -57,3 +58,7 @@ int main () - [Clang](/implementation.md#clang): ?? - [GCC](/implementation.md#gcc): ?? - [Visual C++](/implementation.md#visual_cpp): ?? + + +## 参照 +- [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/end.md b/reference/flat_set/flat_multiset/end.md index 48ab910d61..df4c74e363 100644 --- a/reference/flat_set/flat_multiset/end.md +++ b/reference/flat_set/flat_multiset/end.md @@ -6,8 +6,11 @@ * cpp23[meta cpp] ```cpp -iterator end() noexcept; -const_iterator end() const noexcept; +iterator end() noexcept; // (1) C++23 +constexpr iterator end() noexcept; // (1) C++26 + +const_iterator end() const noexcept; // (2) C++23 +constexpr const_iterator end() const noexcept; // (2) C++26 ``` ## 概要 @@ -73,3 +76,7 @@ int main() | [`flat_multiset::rend`](rend.md) | 先頭の前を指す逆イテレータを取得する | | [`flat_multiset::crbegin`](crbegin.md) | 末尾を指す逆constイテレータを取得する | | [`flat_multiset::crend`](crend.md) | 先頭の前を指す逆constイテレータを取得する | + + +## 参照 +- [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/equal_range.md b/reference/flat_set/flat_multiset/equal_range.md index 9c7d4e6da8..5f03b65066 100644 --- a/reference/flat_set/flat_multiset/equal_range.md +++ b/reference/flat_set/flat_multiset/equal_range.md @@ -6,17 +6,29 @@ * cpp23[meta cpp] ```cpp -pair equal_range(const key_type& x); // (1) C++23 +pair + equal_range(const key_type& x); // (1) C++23 +constexpr pair + equal_range(const key_type& x); // (1) C++26 template -pair equal_range(const K& x); // (2) C++23 +pair + equal_range(const K& x); // (2) C++23 +template +constexpr pair + equal_range(const K& x); // (2) C++26 pair - equal_range(const key_type& x) const; // (3) C++23 + equal_range(const key_type& x) const; // (3) C++23 +constexpr pair + equal_range(const key_type& x) const; // (3) C++26 template pair - equal_range(const K& x) const; // (4) C++23 + equal_range(const K& x) const; // (4) C++23 +template +constexpr pair + equal_range(const K& x) const; // (4) C++26 ``` ## 概要 @@ -83,3 +95,7 @@ int main() | [`flat_multiset::lower_bound`](lower_bound.md) | 与えられた値より小さくない最初の要素へのイテレータを返す | | [`flat_multiset::upper_bound`](upper_bound.md) | 特定の値よりも大きい最初の要素へのイテレータを返す | | [`flat_multiset::find`](find.md) | 指定したキーで要素を探す | + + +## 参照 +- [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/erase.md b/reference/flat_set/flat_multiset/erase.md index 44d0db376d..176f428e00 100644 --- a/reference/flat_set/flat_multiset/erase.md +++ b/reference/flat_set/flat_multiset/erase.md @@ -6,16 +6,22 @@ * cpp23[meta cpp] ```cpp -iterator erase(iterator position); // (1) C++23 +iterator erase(iterator position); // (1) C++23 +constexpr iterator erase(iterator position); // (1) C++26 -iterator erase(const_iterator position); // (2) C++23 +iterator erase(const_iterator position); // (2) C++23 +constexpr iterator erase(const_iterator position); // (2) C++26 -size_type erase(const key_type& x); // (3) C++23 +size_type erase(const key_type& x); // (3) C++23 +constexpr size_type erase(const key_type& x); // (3) C++26 template -size_type erase(K&& x); // (4) C++23 +size_type erase(K&& x); // (4) C++23 +template +constexpr size_type erase(K&& x); // (4) C++26 -iterator erase(const_iterator first, const_iterator last); // (5) C++23 +iterator erase(const_iterator first, const_iterator last); // (5) C++23 +constexpr iterator erase(const_iterator first, const_iterator last); // (5) C++26 ``` ## 概要 @@ -137,3 +143,7 @@ int main() | [`flat_multiset::clear`](clear.md) | 全ての要素を削除する | | [`flat_multiset::insert`](insert.md) | 要素を挿入する | | [`flat_multiset::find`](find.md) | 指定したキーで要素を探す | + + +## 参照 +- [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/erase_if_free.md b/reference/flat_set/flat_multiset/erase_if_free.md index a35c1ddf0e..9d2d0c18f2 100644 --- a/reference/flat_set/flat_multiset/erase_if_free.md +++ b/reference/flat_set/flat_multiset/erase_if_free.md @@ -12,7 +12,14 @@ namespace std { class Predicate> typename flat_multiset::size_type erase_if(flat_multiset& c, - Predicate pred); + Predicate pred); // (1) C++23 + template + constexpr typename flat_multiset::size_type + erase_if(flat_multiset& c, + Predicate pred); // (1) C++26 } ``` @@ -75,3 +82,7 @@ int main() - [Clang](/implementation.md#clang): ?? - [GCC](/implementation.md#gcc): ?? - [Visual C++](/implementation.md#visual_cpp): ?? + + +## 参照 +- [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/extract.md b/reference/flat_set/flat_multiset/extract.md index 43508c5fa9..08735e6466 100644 --- a/reference/flat_set/flat_multiset/extract.md +++ b/reference/flat_set/flat_multiset/extract.md @@ -6,7 +6,8 @@ * cpp23[meta cpp] ```cpp -container_type extract() &&; // C++23 +container_type extract() &&; // (1) C++23 +constexpr container_type extract() &&; // (1) C++26 ``` ## 概要 @@ -76,3 +77,7 @@ int main() - [GCC](/implementation.md#gcc): ?? - [ICC](/implementation.md#icc): ?? - [Visual C++](/implementation.md#visual_cpp): ?? + + +## 参照 +- [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/find.md b/reference/flat_set/flat_multiset/find.md index 3d8b1ea920..96d94afec6 100644 --- a/reference/flat_set/flat_multiset/find.md +++ b/reference/flat_set/flat_multiset/find.md @@ -6,15 +6,21 @@ * cpp23[meta cpp] ```cpp -iterator find(const key_type& x); // (1) C++23 +iterator find(const key_type& x); // (1) C++23 +constexpr iterator find(const key_type& x); // (1) C++26 template -iterator find(const K& x); // (2) C++23 +iterator find(const K& x); // (2) C++23 +template +constexpr iterator find(const K& x); // (2) C++26 -const_iterator find(const key_type& x) const; // (3) C++23 +const_iterator find(const key_type& x) const; // (3) C++23 +constexpr const_iterator find(const key_type& x) const; // (3) C++26 template -const_iterator find(const K& x) const; // (4) C++23 +const_iterator find(const K& x) const; // (4) C++23 +template +constexpr const_iterator find(const K& x) const; // (4) C++26 ``` ## 概要 @@ -100,3 +106,7 @@ Bob ## 関連項目 - [`contains()`](contains.md) + + +## 参照 +- [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/insert.md b/reference/flat_set/flat_multiset/insert.md index 14294b61e2..4a10e439b8 100644 --- a/reference/flat_set/flat_multiset/insert.md +++ b/reference/flat_set/flat_multiset/insert.md @@ -6,34 +6,69 @@ * cpp23[meta cpp] ```cpp -iterator insert(const value_type& x); // (1) C++23 -iterator insert(value_type&& x); // (2) C++23 - -iterator insert(const_iterator position, - const value_type& x); // (3) C++23 -iterator insert(const_iterator position, - value_type&& x); // (4) C++23 +iterator insert(const value_type& x); // (1) C++23 +constexpr iterator insert(const value_type& x); // (1) C++26 + +iterator insert(value_type&& x); // (2) C++23 +constexpr iterator insert(value_type&& x); // (2) C++26 + +iterator + insert(const_iterator position, + const value_type& x); // (3) C++23 +constexpr iterator + insert(const_iterator position, + const value_type& x); // (3) C++26 + +iterator + insert(const_iterator position, + value_type&& x); // (4) C++23 +constexpr iterator + insert(const_iterator position, + value_type&& x); // (4) C++26 template -iterator insert(P&& x); // (5) C++23 +iterator insert(P&& x); // (5) C++23 +template +constexpr iterator insert(P&& x); // (5) C++26 template -iterator insert(const_iterator position, - P&&); // (6) C++23 +iterator + insert(const_iterator position, + P&& x); // (6) C++23 +template +constexpr iterator + insert(const_iterator position, + P&& x); // (6) C++26 template -void insert(InputIterator first, - InputIterator last); // (7) C++23 - +void + insert(InputIterator first, + InputIterator last); // (7) C++23 template -void insert(sorted_equivalent_t, - InputIterator first, - InputIterator last); // (8) C++23 - -void insert(initializer_list il); // (9) C++23 +constexpr void + insert(InputIterator first, + InputIterator last); // (7) C++26 -void insert(sorted_equivalent_t, - initializer_list il); // (10) C++23 +template +void + insert(sorted_equivalent_t, + InputIterator first, + InputIterator last); // (8) C++23 +template +constexpr void + insert(sorted_equivalent_t, + InputIterator first, + InputIterator last); // (8) C++26 + +void insert(initializer_list il); // (9) C++23 +constexpr void insert(initializer_list il); // (9) C++26 + +void + insert(sorted_equivalent_t, + initializer_list il); // (10) C++23 +constexpr void + insert(sorted_equivalent_t, + initializer_list il); // (10) C++26 ``` * initializer_list[link /reference/initializer_list/initializer_list.md] * sorted_equivalent_t[link /reference/flat_set/sorted_equivalent_t.md] @@ -213,3 +248,7 @@ int main() | [`flat_multiset::insert_range`](insert_range.md) | Rangeを挿入する | | [`flat_multiset::emplace`](emplace.md) | 要素を直接構築する | | [`flat_multiset::emplace_hint`](emplace_hint.md) | ヒントを使って要素を直接構築する | + + +## 参照 +- [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/insert_range.md b/reference/flat_set/flat_multiset/insert_range.md index 596ed6105f..93d22062d3 100644 --- a/reference/flat_set/flat_multiset/insert_range.md +++ b/reference/flat_set/flat_multiset/insert_range.md @@ -7,7 +7,9 @@ ```cpp template R> -void insert_range(R&& rg); // (1) C++23 +void insert_range(R&& rg); // (1) C++23 +template R> +constexpr void insert_range(R&& rg); // (1) C++26 ``` * container-compatible-range[link /reference/exposition-only/container-compatible-range.md] @@ -71,3 +73,7 @@ int main() | [`flat_multiset::insert`](insert.md) | 要素を挿入する | | [`flat_multiset::emplace`](emplace.md) | 要素を直接構築する | | [`flat_multiset::emplace_hint`](emplace_hint.md) | ヒントを使って要素を直接構築する | + + +## 参照 +- [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/key_comp.md b/reference/flat_set/flat_multiset/key_comp.md index 01d8f6ebc4..6e7aa711ac 100644 --- a/reference/flat_set/flat_multiset/key_comp.md +++ b/reference/flat_set/flat_multiset/key_comp.md @@ -6,7 +6,8 @@ * cpp23[meta cpp] ```cpp -key_compare key_comp() const; // C++23 +key_compare key_comp() const; // (1) C++23 +constexpr key_compare key_comp() const; // (1) C++26 ``` @@ -62,3 +63,7 @@ int main() | 名前 | 説明 | |-------------------------------------|----------------------------------------------------------| | [`value_comp`](value_comp.md) | 要素比較用の関数オブジェクトを返す | + + +## 参照 +- [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/lower_bound.md b/reference/flat_set/flat_multiset/lower_bound.md index 6931de6d70..6ff8ba7040 100644 --- a/reference/flat_set/flat_multiset/lower_bound.md +++ b/reference/flat_set/flat_multiset/lower_bound.md @@ -6,15 +6,21 @@ * cpp23[meta cpp] ```cpp -iterator lower_bound(const key_type& x); // (1) C++23 +iterator lower_bound(const key_type& x); // (1) C++23 +constexpr iterator lower_bound(const key_type& x); // (1) C++26 template -iterator lower_bound(const K& x); // (2) C++23 +iterator lower_bound(const K& x); // (2) C++23 +template +constexpr iterator lower_bound(const K& x); // (2) C++26 -const_iterator lower_bound(const key_type& x) const; // (3) C++23 +const_iterator lower_bound(const key_type& x) const; // (3) C++23 +constexpr const_iterator lower_bound(const key_type& x) const; // (3) C++26 template -const_iterator lower_bound(const K& x) const; // (4) C++23 +const_iterator lower_bound(const K& x) const; // (4) C++23 +template +constexpr const_iterator lower_bound(const K& x) const; // (4) C++26 ``` ## 概要 @@ -119,3 +125,7 @@ David | [`flat_multiset::equal_range`](equal_range.md) | 指定したキーにマッチする要素範囲を返す | | [`flat_multiset::find`](find.md) | 指定したキーで要素を探す | | [`flat_multiset::count`](count.md) | 指定したキーにマッチする要素の数を返す | + + +## 参照 +- [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/max_size.md b/reference/flat_set/flat_multiset/max_size.md index 2e73e75070..cd0a634aeb 100644 --- a/reference/flat_set/flat_multiset/max_size.md +++ b/reference/flat_set/flat_multiset/max_size.md @@ -6,7 +6,8 @@ * cpp23[meta cpp] ```cpp -size_type max_size() const noexcept; // (1) C++23 +size_type max_size() const noexcept; // (1) C++23 +constexpr size_type max_size() const noexcept; // (1) C++26 ``` ## 概要 @@ -49,3 +50,7 @@ int main() - [Clang](/implementation.md#clang): ?? - [GCC](/implementation.md#gcc): ?? - [Visual C++](/implementation.md#visual_cpp): ?? + + +## 参照 +- [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_assign.md b/reference/flat_set/flat_multiset/op_assign.md index d83fee63ab..37eeda2586 100644 --- a/reference/flat_set/flat_multiset/op_assign.md +++ b/reference/flat_set/flat_multiset/op_assign.md @@ -6,7 +6,8 @@ * cpp23[meta cpp] ```cpp -flat_multiset& operator=(initializer_list il); // C++23 +flat_multiset& operator=(initializer_list il); // (1) C++23 +constexpr flat_multiset& operator=(initializer_list il); // (1) C++26 ``` * initializer_list[link /reference/initializer_list/initializer_list.md] @@ -64,3 +65,7 @@ Carol - [GCC](/implementation.md#gcc): ?? - [ICC](/implementation.md#icc): ?? - [Visual C++](/implementation.md#visual_cpp): ?? + + +## 参照 +- [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_compare_3way.md b/reference/flat_set/flat_multiset/op_compare_3way.md index 2a7ca417df..e921ebb48e 100644 --- a/reference/flat_set/flat_multiset/op_compare_3way.md +++ b/reference/flat_set/flat_multiset/op_compare_3way.md @@ -9,6 +9,9 @@ synth-three-way-result operator<=>(const flat_multiset& x, const flat_multiset& y); // (1) C++23 +constexpr synth-three-way-result + operator<=>(const flat_multiset& x, + const flat_multiset& y); // (1) C++26 ``` ## 概要 @@ -81,3 +84,7 @@ false - [Clang](/implementation.md#clang): ?? - [GCC](/implementation.md#gcc): ?? - [Visual C++](/implementation.md#visual_cpp): ?? + + +## 参照 +- [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 ad03d33063..9d3be401a2 100644 --- a/reference/flat_set/flat_multiset/op_constructor.md +++ b/reference/flat_set/flat_multiset/op_constructor.md @@ -8,117 +8,281 @@ ```cpp // ____要素数ゼロのflat_multisetを構築____ -flat_multiset() : flat_multiset(key_compare()) { } // (1) C++23 +flat_multiset() + : flat_multiset(key_compare()) { } // (1) C++23 -explicit flat_multiset(const key_compare& comp) // (2) C++23 - : c(), compare(comp) { } +explicit + flat_multiset(const key_compare& comp) // (2) C++23 + : c(), compare(comp) { } +constexpr explicit + flat_multiset(const key_compare& comp) // (2) C++26 + : c(), compare(comp) { } template -explicit flat_multiset(const Allocator& a); // (3) C++23 +explicit + flat_multiset(const Allocator& a); // (3) C++23 +template +constexpr explicit + flat_multiset(const Allocator& a); // (3) C++26 template -flat_multiset(const key_compare& comp, const Allocator& a); // (4) C++23 +flat_multiset(const key_compare& comp, + const Allocator& a); // (4) C++23 +template +constexpr + flat_multiset(const key_compare& comp, + const Allocator& a); // (4) C++26 // ____アロケータを伴うコピー&ムーブコンストラクタ____ template - flat_multiset(const flat_multiset& x, const Allocator& a); // (5) C++26 + constexpr + flat_multiset(const flat_multiset& x, + const Allocator& a); // (5) C++26 template - flat_multiset(flat_multiset&& x, const Allocator& a); // (6) C++26 + constexpr + flat_multiset(flat_multiset&& x, + const Allocator& a); // (6) C++26 // ____container_typeから構築____ flat_multiset(container_type cont, - const key_compare& comp = key_compare()); // (7) C++23 + const key_compare& comp = key_compare()); // (7) C++23 +constexpr + flat_multiset(container_type cont, + const key_compare& comp = key_compare()); // (7) C++26 template flat_multiset(const container_type& cont, - const Allocator& a); // (8) C++23 + const Allocator& a); // (8) C++23 +template +constexpr + flat_multiset(const container_type& cont, + const Allocator& a); // (8) C++26 template flat_multiset(const container_type& cont, - const key_compare& comp, const Allocator& a); // (9) C++23 + const key_compare& comp, + const Allocator& a); // (9) C++23 +template +constexpr + flat_multiset(const container_type& cont, + const key_compare& comp, + const Allocator& a); // (9) C++26 // ____container_type(ソート済み)から構築____ -flat_multiset(sorted_equivalent_t, container_type cont, - const key_compare& comp = key_compare()); // (10) C++23 +flat_multiset(sorted_equivalent_t, + container_type cont, + const key_compare& comp = key_compare()); // (10) C++23 +constexpr + flat_multiset(sorted_equivalent_t, + container_type cont, + const key_compare& comp = key_compare()); // (10) C++26 template -flat_multiset(sorted_equivalent_t, const container_type& cont, - const Allocator& a); // (11) C++23 +flat_multiset(sorted_equivalent_t, + const container_type& cont, + const Allocator& a); // (11) C++23 +template +constexpr + flat_multiset(sorted_equivalent_t, + const container_type& cont, + const Allocator& a); // (11) C++26 template -flat_multiset(sorted_equivalent_t, const container_type& cont, - const key_compare& comp, const Allocator& a); // (12) C++23 +flat_multiset(sorted_equivalent_t, + const container_type& cont, + const key_compare& comp, + const Allocator& a); // (12) C++23 +template +constexpr + flat_multiset(sorted_equivalent_t, + const container_type& cont, + const key_compare& comp, + const Allocator& a); // (12) C++26 // ____イテレータから構築____ - template -flat_multiset(InputIterator first, InputIterator last, const key_compare& comp = key_compare()) // (13) C++23 +flat_multiset(InputIterator first, + InputIterator last, + const key_compare& comp = key_compare()) // (13) C++23 : c(), compare(comp) { insert(first, last); } +template +constexpr + flat_multiset(InputIterator first, + InputIterator last, + const key_compare& comp = key_compare()) // (13) C++26 + : c(), compare(comp) { insert(first, last); } template -flat_multiset(InputIterator first, InputIterator last, const Allocator& a); // (14) C++23 +flat_multiset(InputIterator first, + InputIterator last, + const Allocator& a); // (14) C++23 +template +constexpr + flat_multiset(InputIterator first, + InputIterator last, + const Allocator& a); // (14) C++26 template -flat_multiset(InputIterator first, InputIterator last, - const key_compare& comp, const Allocator& a); // (15) C++23 +flat_multiset(InputIterator first, + InputIterator last, + const key_compare& comp, + const Allocator& a); // (15) C++23 +template +constexpr + flat_multiset(InputIterator first, + InputIterator last, + const key_compare& comp, + const Allocator& a); // (15) C++26 // ____イテレータ(ソート済み)から構築____ - template -flat_multiset(sorted_equivalent_t s, InputIterator first, InputIterator last, - const key_compare& comp = key_compare()) // (16) C++23 +flat_multiset(sorted_equivalent_t s, + InputIterator first, + InputIterator last, + const key_compare& comp = key_compare()) // (16) C++23 : c(), compare(comp) { insert(s, first, last); } +template +constexpr + flat_multiset(sorted_equivalent_t s, + InputIterator first, + InputIterator last, + const key_compare& comp = key_compare()) // (16) C++26 + : c(), compare(comp) { insert(s, first, last); } template -flat_multiset(sorted_equivalent_t, InputIterator first, InputIterator last, const Allocator& a); // (17) C++23 +flat_multiset(sorted_equivalent_t, + InputIterator first, + InputIterator last, + const Allocator& a); // (17) C++23 +template +constexpr + flat_multiset(sorted_equivalent_t, + InputIterator first, + InputIterator last, + const Allocator& a); // (17) C++26 template -flat_multiset(sorted_equivalent_t, InputIterator first, InputIterator last, - const key_compare& comp, const Allocator& a); // (18) C++23 +flat_multiset(sorted_equivalent_t, + InputIterator first, + InputIterator last, + const key_compare& comp, + const Allocator& a); // (18) C++23 +template +constexpr + flat_multiset(sorted_equivalent_t, + InputIterator first, + InputIterator last, + const key_compare& comp, + const Allocator& a); // (18) C++26 // ____Rangeから構築____ - template R> -flat_multiset(from_range_t fr, R&& rg) // (19) C++23 +flat_multiset(from_range_t fr, + R&& rg) // (19) C++23 : flat_multiset(fr, forward(rg), key_compare()) { } +template R> +constexpr + flat_multiset(from_range_t fr, + R&& rg) // (19) C++26 + : flat_multiset(fr, forward(rg), key_compare()) { } template R> -flat_multiset(from_range_t, R&& rg, const key_compare& comp) // (20) C++23 +flat_multiset(from_range_t, + R&& rg, + const key_compare& comp) // (20) C++23 : flat_multiset(comp) { insert_range(forward(rg)); } +template R> +constexpr + flat_multiset(from_range_t, + R&& rg, + const key_compare& comp) // (20) C++26 + : flat_multiset(comp) { insert_range(forward(rg)); } template R, class Allocator> -flat_multiset(from_range_t, R&& rg, const Allocator& a); // (21) C++23 +flat_multiset(from_range_t, + R&& rg, + const Allocator& a); // (21) C++23 +template R, class Allocator> +constexpr + flat_multiset(from_range_t, + R&& rg, + const Allocator& a); // (21) C++26 template R, class Allocator> -flat_multiset(from_range_t, R&& rg, const key_compare& comp, const Allocator& a); // (22) C++23 +flat_multiset(from_range_t, + R&& rg, + const key_compare& comp, + const Allocator& a); // (22) C++23 +template R, class Allocator> +constexpr + flat_multiset(from_range_t, + R&& rg, + const key_compare& comp, + const Allocator& a); // (22) C++26 // ____initializer_listから構築____ - -flat_multiset(initializer_list il, const key_compare& comp = key_compare()) // (23) C++23 +flat_multiset(initializer_list il, + const key_compare& comp = key_compare()) // (23) C++23 : flat_multiset(il.begin(), il.end(), comp) { } +constexpr + flat_multiset(initializer_list il, + const key_compare& comp = key_compare()) // (23) C++26 + : flat_multiset(il.begin(), il.end(), comp) { } template -flat_multiset(initializer_list il, const Allocator& a); // (24) C++23 +flat_multiset(initializer_list il, + const Allocator& a); // (24) C++23 +template +constexpr + flat_multiset(initializer_list il, + const Allocator& a); // (24) C++26 template -flat_multiset(initializer_list il, const key_compare& comp, const Allocator& a); // (25) C++23 +flat_multiset(initializer_list il, + const key_compare& comp, + const Allocator& a); // (25) C++23 +template +constexpr + flat_multiset(initializer_list il, + const key_compare& comp, + const Allocator& a); // (25) C++26 // ____initializer_list(ソート済み)から構築____ - -flat_multiset(sorted_equivalent_t s, initializer_list il, - const key_compare& comp = key_compare()) // (26) C++23 +flat_multiset(sorted_equivalent_t s, + initializer_list il, + const key_compare& comp = key_compare()) // (26) C++23 + : flat_multiset(s, il.begin(), il.end(), comp) { } +constexpr + flat_multiset(sorted_equivalent_t s, + initializer_list il, + const key_compare& comp = key_compare()) // (26) C++26 : flat_multiset(s, il.begin(), il.end(), comp) { } template -flat_multiset(sorted_equivalent_t, initializer_list il, const Allocator& a); // (27) C++23 +flat_multiset(sorted_equivalent_t, + initializer_list il, + const Allocator& a); // (27) C++23 +template +constexpr + flat_multiset(sorted_equivalent_t, + initializer_list il, + const Allocator& a); // (27) C++26 template -flat_multiset(sorted_equivalent_t, initializer_list il, - const key_compare& comp, const Allocator& a); // (28) C++23 +flat_multiset(sorted_equivalent_t, + initializer_list il, + const key_compare& comp, + const Allocator& a); // (28) C++23 +template +constexpr + flat_multiset(sorted_equivalent_t, + initializer_list il, + const key_compare& comp, + const Allocator& a); // (28) C++26 ``` * initializer_list[link /reference/initializer_list/initializer_list.md] * from_range_t[link ../../ranges/from_range_t.md] @@ -264,3 +428,7 @@ int main() | 名前 | 説明 | |---------------------------------------|--------------------------------------------| | [`uses_allocator`](uses_allocator.md) | 指定されたアロケータと合致するかをチェックする | + + +## 参照 +- [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_equal.md b/reference/flat_set/flat_multiset/op_equal.md index a34524a175..b77dadb9d8 100644 --- a/reference/flat_set/flat_multiset/op_equal.md +++ b/reference/flat_set/flat_multiset/op_equal.md @@ -6,7 +6,8 @@ * cpp23[meta cpp] ```cpp -friend bool operator==(const flat_multiset& x, const flat_multiset& y); +friend bool operator==(const flat_multiset& x, const flat_multiset& y); // (1) C++23 +constexpr friend bool operator==(const flat_multiset& x, const flat_multiset& y); // (1) C++26 ``` ## 概要 @@ -69,3 +70,7 @@ true - [Clang](/implementation.md#clang): ?? - [GCC](/implementation.md#gcc): ?? - [Visual C++](/implementation.md#visual_cpp): ?? + + +## 参照 +- [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/rbegin.md b/reference/flat_set/flat_multiset/rbegin.md index f1258edbeb..0e7bea2fd5 100644 --- a/reference/flat_set/flat_multiset/rbegin.md +++ b/reference/flat_set/flat_multiset/rbegin.md @@ -6,8 +6,11 @@ * cpp23[meta cpp] ```cpp -reverse_iterator rbegin() noexcept; -const_reverse_iterator rbegin() const noexcept; +reverse_iterator rbegin() noexcept; // (1) C++23 +constexpr reverse_iterator rbegin() noexcept; // (1) C++26 + +const_reverse_iterator rbegin() const noexcept; // (2) C++23 +constexpr const_reverse_iterator rbegin() const noexcept; // (2) C++26 ``` ## 概要 @@ -72,3 +75,7 @@ int main() | [`flat_multiset::rend`](rend.md) | 先頭の前を指す逆イテレータを取得する | | [`flat_multiset::crbegin`](crbegin.md) | 末尾を指す逆constイテレータを取得する | | [`flat_multiset::crend`](crend.md) | 先頭の前を指す逆constイテレータを取得する | + + +## 参照 +- [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/rend.md b/reference/flat_set/flat_multiset/rend.md index 9e5d1f7449..1adef50857 100644 --- a/reference/flat_set/flat_multiset/rend.md +++ b/reference/flat_set/flat_multiset/rend.md @@ -6,8 +6,11 @@ * cpp23[meta cpp] ```cpp -reverse_iterator rend() noexcept; -const_reverse_iterator rend() const noexcept; +reverse_iterator rend() noexcept; // (1) C++23 +constexpr reverse_iterator rend() noexcept; // (1) C++26 + +const_reverse_iterator rend() const noexcept; // (2) C++23 +constexpr const_reverse_iterator rend() const noexcept; // (2) C++26 ``` ## 概要 @@ -65,3 +68,7 @@ int main() | [`flat_multiset::rbegin`](rbegin.md) | 末尾を指す逆イテレータを取得する | | [`flat_multiset::crbegin`](crbegin.md) | 末尾を指す逆constイテレータを取得する | | [`flat_multiset::crend`](crend.md) | 先頭の前を指す逆constイテレータを取得する | + + +## 参照 +- [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/replace.md b/reference/flat_set/flat_multiset/replace.md index 99a8f02e2b..cafcfa590f 100644 --- a/reference/flat_set/flat_multiset/replace.md +++ b/reference/flat_set/flat_multiset/replace.md @@ -6,7 +6,8 @@ * cpp23[meta cpp] ```cpp -void replace(container_type&& cont); // C++23 +void replace(container_type&& cont); // (1) C++23 +constexpr void replace(container_type&& cont); // (1) C++26 ``` ## 概要 @@ -88,3 +89,7 @@ int main() - [GCC](/implementation.md#gcc): ?? - [ICC](/implementation.md#icc): ?? - [Visual C++](/implementation.md#visual_cpp): ?? + + +## 参照 +- [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/size.md b/reference/flat_set/flat_multiset/size.md index 96cd7d9027..ea1fc2008b 100644 --- a/reference/flat_set/flat_multiset/size.md +++ b/reference/flat_set/flat_multiset/size.md @@ -6,7 +6,8 @@ * cpp23[meta cpp] ```cpp -size_type size() const noexcept; +size_type size() const noexcept; // (1) C++23 +constexpr size_type size() const noexcept; // (1) C++26 ``` ## 概要 @@ -67,3 +68,7 @@ int main () ## 関連項目 - [`empty()`](empty.md) + + +## 参照 +- [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/swap.md b/reference/flat_set/flat_multiset/swap.md index 9b8a369d6d..7112799033 100644 --- a/reference/flat_set/flat_multiset/swap.md +++ b/reference/flat_set/flat_multiset/swap.md @@ -6,7 +6,8 @@ * cpp23[meta cpp] ```cpp -void swap(flat_multiset& y) noexcept; // (1) C++23 +void swap(flat_multiset& y) noexcept; // (1) C++23 +constexpr void swap(flat_multiset& y) noexcept; // (1) C++26 ``` ## 概要 @@ -73,3 +74,7 @@ fs2 : {10, 20, 30} - [Clang](/implementation.md#clang): ?? - [GCC](/implementation.md#gcc): ?? - [Visual C++](/implementation.md#visual_cpp): ?? + + +## 参照 +- [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/swap_free.md b/reference/flat_set/flat_multiset/swap_free.md index f1e0c04ea3..0192721c2c 100644 --- a/reference/flat_set/flat_multiset/swap_free.md +++ b/reference/flat_set/flat_multiset/swap_free.md @@ -7,8 +7,13 @@ ```cpp namespace std { template - void swap(flat_multiset& x, - flat_multiset& y); // (1) C++23 + void + swap(flat_multiset& x, + flat_multiset& y); // (1) C++23 + template + constexpr void + swap(flat_multiset& x, + flat_multiset& y); // (1) C++26 } ``` @@ -74,3 +79,7 @@ fs2 : {10, 20, 30} - [Clang](/implementation.md#clang): ?? - [GCC](/implementation.md#gcc): ?? - [Visual C++](/implementation.md#visual_cpp): ?? + + +## 参照 +- [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/upper_bound.md b/reference/flat_set/flat_multiset/upper_bound.md index 880a11f82c..49344942c9 100644 --- a/reference/flat_set/flat_multiset/upper_bound.md +++ b/reference/flat_set/flat_multiset/upper_bound.md @@ -6,15 +6,21 @@ * cpp23[meta cpp] ```cpp -iterator upper_bound(const key_type& x); // (1) C++23 +iterator upper_bound(const key_type& x); // (1) C++23 +constexpr iterator upper_bound(const key_type& x); // (1) C++26 template -iterator upper_bound(const K& x); // (2) C++23 +iterator upper_bound(const K& x); // (2) C++23 +template +constexpr iterator upper_bound(const K& x); // (2) C++26 -const_iterator upper_bound(const key_type& x) const; // (3) C++23 +const_iterator upper_bound(const key_type& x) const; // (3) C++23 +constexpr const_iterator upper_bound(const key_type& x) const; // (3) C++26 template -const_iterator upper_bound(const K& x) const; // (4) C++23 +const_iterator upper_bound(const K& x) const; // (4) C++23 +template +constexpr const_iterator upper_bound(const K& x) const; // (4) C++26 ``` ## 概要 @@ -119,3 +125,7 @@ David | [`flat_multiset::equal_range`](equal_range.md) | 指定したキーにマッチする要素範囲を返す | | [`flat_multiset::find`](find.md) | 指定したキーで要素を探す | | [`flat_multiset::count`](count.md) | 指定したキーにマッチする要素の数を返す | + + +## 参照 +- [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/value_comp.md b/reference/flat_set/flat_multiset/value_comp.md index f823b1c755..3af2dc5d31 100644 --- a/reference/flat_set/flat_multiset/value_comp.md +++ b/reference/flat_set/flat_multiset/value_comp.md @@ -6,7 +6,8 @@ * cpp23[meta cpp] ```cpp -value_compare value_comp() const; // C++23 +value_compare value_comp() const; // (1) C++23 +constexpr value_compare value_comp() const; // (1) C++26 ``` @@ -63,3 +64,7 @@ int main() | 名前 | 説明 | |-------------------------------------|----------------------------------------------------------| | [`key_comp`](key_comp.md) | キー比較用の関数オブジェクトを取得する | + + +## 参照 +- [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/begin.md b/reference/flat_set/flat_set/begin.md index 76cd50864d..2ee2b571a9 100644 --- a/reference/flat_set/flat_set/begin.md +++ b/reference/flat_set/flat_set/begin.md @@ -6,8 +6,11 @@ * cpp23[meta cpp] ```cpp -iterator begin() noexcept; -const_iterator begin() const noexcept; +iterator begin() noexcept; // (1) C++23 +constexpr iterator begin() noexcept; // (1) C++26 + +const_iterator begin() const noexcept; // (2) C++23 +constexpr const_iterator begin() const noexcept; // (2) C++26 ``` @@ -71,3 +74,7 @@ int main() | [`flat_set::rend`](rend.md) | 先頭の前を指す逆イテレータを取得する | | [`flat_set::crbegin`](crbegin.md) | 末尾を指す逆constイテレータを取得する | | [`flat_set::crend`](crend.md) | 先頭の前を指す逆constイテレータを取得する | + + +## 参照 +- [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/cbegin.md b/reference/flat_set/flat_set/cbegin.md index 6be52785bb..e331022d95 100644 --- a/reference/flat_set/flat_set/cbegin.md +++ b/reference/flat_set/flat_set/cbegin.md @@ -6,7 +6,8 @@ * cpp23[meta cpp] ```cpp -const_iterator cbegin() const noexcept; +const_iterator cbegin() const noexcept; // (1) C++23 +constexpr const_iterator cbegin() const noexcept; // (1) C++26 ``` @@ -67,3 +68,7 @@ int main() | [`flat_set::rend`](rend.md) | 先頭の前を指す逆イテレータを取得する | | [`flat_set::crbegin`](crbegin.md) | 末尾を指す逆constイテレータを取得する | | [`flat_set::crend`](crend.md) | 先頭の前を指す逆constイテレータを取得する | + + +## 参照 +- [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/cend.md b/reference/flat_set/flat_set/cend.md index a2ad3527b5..881e6e8a51 100644 --- a/reference/flat_set/flat_set/cend.md +++ b/reference/flat_set/flat_set/cend.md @@ -6,7 +6,8 @@ * cpp23[meta cpp] ```cpp -const_iterator cend() const noexcept; +const_iterator cend() const noexcept; // (1) C++23 +constexpr const_iterator cend() const noexcept; // (1) C++26 ``` ## 概要 @@ -70,3 +71,7 @@ int main() | [`flat_set::rend`](rend.md) | 先頭の前を指す逆イテレータを取得する | | [`flat_set::crbegin`](crbegin.md) | 末尾を指す逆constイテレータを取得する | | [`flat_set::crend`](crend.md) | 先頭の前を指す逆constイテレータを取得する | + + +## 参照 +- [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/clear.md b/reference/flat_set/flat_set/clear.md index 29bc4b37f1..d88a72e2a8 100644 --- a/reference/flat_set/flat_set/clear.md +++ b/reference/flat_set/flat_set/clear.md @@ -6,7 +6,8 @@ * cpp23[meta cpp] ```cpp -void clear() noexcept; // (1) C++23 +void clear() noexcept; // (1) C++23 +constexpr void clear() noexcept; // (1) C++26 ``` ## 概要 @@ -54,3 +55,7 @@ int main () - [Clang](/implementation.md#clang): ?? - [GCC](/implementation.md#gcc): ?? - [Visual C++](/implementation.md#visual_cpp): ?? + + +## 参照 +- [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/contains.md b/reference/flat_set/flat_set/contains.md index 9d9e01d6cc..9a682abe0c 100644 --- a/reference/flat_set/flat_set/contains.md +++ b/reference/flat_set/flat_set/contains.md @@ -6,10 +6,13 @@ * cpp23[meta cpp] ```cpp -bool contains(const key_type& x) const; // (1) C++23 +bool contains(const key_type& x) const; // (1) C++23 +constexpr bool contains(const key_type& x) const; // (1) C++26 template -bool contains(const K& x) const; // (2) C++23 +bool contains(const K& x) const; // (2) C++23 +template +constexpr bool contains(const K& x) const; // (2) C++26 ``` @@ -78,3 +81,7 @@ contain - [Clang](/implementation.md#clang): ?? - [GCC](/implementation.md#gcc): ?? - [Visual C++](/implementation.md#visual_cpp): ?? + + +## 参照 +- [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/count.md b/reference/flat_set/flat_set/count.md index 4d6f18f86f..ad9512cee3 100644 --- a/reference/flat_set/flat_set/count.md +++ b/reference/flat_set/flat_set/count.md @@ -6,10 +6,13 @@ * cpp23[meta cpp] ```cpp -size_type count(const key_type& x) const; // (1) C++23 +size_type count(const key_type& x) const; // (1) C++23 +constexpr size_type count(const key_type& x) const; // (1) C++26 template -size_type count(const K& x) const; // (2) C++23 +size_type count(const K& x) const; // (2) C++23 +template +constexpr size_type count(const K& x) const; // (2) C++26 ``` ## 概要 @@ -95,3 +98,7 @@ found ## 関連項目 - [`contains()`](contains.md) + + +## 参照 +- [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/crbegin.md b/reference/flat_set/flat_set/crbegin.md index 966106f5b8..81f9842932 100644 --- a/reference/flat_set/flat_set/crbegin.md +++ b/reference/flat_set/flat_set/crbegin.md @@ -6,7 +6,8 @@ * cpp23[meta cpp] ```cpp -const_reverse_iterator crbegin() const noexcept; +const_reverse_iterator crbegin() const noexcept; // (1) C++23 +constexpr const_reverse_iterator crbegin() const noexcept; // (1) C++26 ``` ## 概要 @@ -68,3 +69,7 @@ int main() | [`flat_set::rbegin`](rbegin.md) | 末尾を指す逆イテレータを取得する | | [`flat_set::rend`](rend.md) | 先頭の前を指す逆イテレータを取得する | | [`flat_set::crend`](crend.md) | 先頭の前を指す逆constイテレータを取得する | + + +## 参照 +- [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/crend.md b/reference/flat_set/flat_set/crend.md index 01a8136abe..7176bd7219 100644 --- a/reference/flat_set/flat_set/crend.md +++ b/reference/flat_set/flat_set/crend.md @@ -6,7 +6,8 @@ * cpp23[meta cpp] ```cpp -const_reverse_iterator crend() const noexcept; +const_reverse_iterator crend() const noexcept; // (1) C++23 +constexpr const_reverse_iterator crend() const noexcept; // (1) C++26 ``` @@ -66,3 +67,7 @@ int main() | [`flat_set::rbegin`](rbegin.md) | 末尾を指す逆イテレータを取得する | | [`flat_set::rend`](rend.md) | 先頭の前を指す逆イテレータを取得する | | [`flat_set::crbegin`](crbegin.md) | 末尾を指す逆constイテレータを取得する | + + +## 参照 +- [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/emplace.md b/reference/flat_set/flat_set/emplace.md index 1c04c403c4..2c9ac1f998 100644 --- a/reference/flat_set/flat_set/emplace.md +++ b/reference/flat_set/flat_set/emplace.md @@ -7,7 +7,9 @@ ```cpp template -pair emplace(Args&&... args); +pair emplace(Args&&... args); // (1) C++23 +template +constexpr pair emplace(Args&&... args); // (1) C++26 ``` ## 概要 @@ -120,3 +122,7 @@ CCCCC | [`flat_set::insert`](insert.md) | 要素を挿入する | | [`flat_set::insert_range`](insert_range.md) | Rangeを挿入する | | [`flat_set::emplace_hint`](emplace_hint.md) | ヒントを使って要素を直接構築する | + + +## 参照 +- [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/emplace_hint.md b/reference/flat_set/flat_set/emplace_hint.md index 46f6abed66..2d97e30210 100644 --- a/reference/flat_set/flat_set/emplace_hint.md +++ b/reference/flat_set/flat_set/emplace_hint.md @@ -7,7 +7,13 @@ ```cpp template -iterator emplace_hint(const_iterator hint, Args&&... args); +iterator + emplace_hint(const_iterator hint, + Args&&... args); // (1) C++23 +template +constexpr iterator + emplace_hint(const_iterator hint, + Args&&... args); // (1) C++26 ``` ## 概要 @@ -73,3 +79,7 @@ int main() | [`flat_set::insert`](insert.md) | 要素を挿入する | | [`flat_set::insert_range`](insert_range.md) | Rangeを挿入する | | [`flat_set::emplace`](emplace.md) | 要素を直接構築する | + + +## 参照 +- [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/empty.md b/reference/flat_set/flat_set/empty.md index 4b5a168160..1c424c7091 100644 --- a/reference/flat_set/flat_set/empty.md +++ b/reference/flat_set/flat_set/empty.md @@ -6,7 +6,8 @@ * cpp23[meta cpp] ```cpp -[[nodiscard]] bool empty() const noexcept; // (1) C++23 +[[nodiscard]] bool empty() const noexcept; // (1) C++23 +[[nodiscard]] constexpr bool empty() const noexcept; // (1) C++26 ``` ## 概要 @@ -58,3 +59,7 @@ int main () - [Clang](/implementation.md#clang): ?? - [GCC](/implementation.md#gcc): ?? - [Visual C++](/implementation.md#visual_cpp): ?? + + +## 参照 +- [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/end.md b/reference/flat_set/flat_set/end.md index 0da6177328..6476d9cec2 100644 --- a/reference/flat_set/flat_set/end.md +++ b/reference/flat_set/flat_set/end.md @@ -6,8 +6,11 @@ * cpp23[meta cpp] ```cpp -iterator end() noexcept; -const_iterator end() const noexcept; +iterator end() noexcept; // (1) C++23 +constexpr iterator end() noexcept; // (1) C++26 + +const_iterator end() const noexcept; // (2) C++23 +constexpr const_iterator end() const noexcept; // (2) C++26 ``` ## 概要 @@ -72,3 +75,7 @@ int main() | [`flat_set::rend`](rend.md) | 先頭の前を指す逆イテレータを取得する | | [`flat_set::crbegin`](crbegin.md) | 末尾を指す逆constイテレータを取得する | | [`flat_set::crend`](crend.md) | 先頭の前を指す逆constイテレータを取得する | + + +## 参照 +- [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/equal_range.md b/reference/flat_set/flat_set/equal_range.md index f7d0551679..bc29ef3663 100644 --- a/reference/flat_set/flat_set/equal_range.md +++ b/reference/flat_set/flat_set/equal_range.md @@ -6,17 +6,29 @@ * cpp23[meta cpp] ```cpp -pair equal_range(const key_type& x); // (1) C++23 +pair + equal_range(const key_type& x); // (1) C++23 +constexpr pair + equal_range(const key_type& x); // (1) C++26 template -pair equal_range(const K& x); // (2) C++23 +pair + equal_range(const K& x); // (2) C++23 +template +constexpr pair + equal_range(const K& x); // (2) C++26 pair - equal_range(const key_type& x) const; // (3) C++23 + equal_range(const key_type& x) const; // (3) C++23 +constexpr pair + equal_range(const key_type& x) const; // (3) C++26 template pair - equal_range(const K& x) const; // (4) C++23 + equal_range(const K& x) const; // (4) C++23 +template +constexpr pair + equal_range(const K& x) const; // (4) C++26 ``` ## 概要 @@ -82,3 +94,7 @@ int main() | [`flat_set::lower_bound`](lower_bound.md) | 与えられた値より小さくない最初の要素へのイテレータを返す | | [`flat_set::upper_bound`](upper_bound.md) | 特定の値よりも大きい最初の要素へのイテレータを返す | | [`flat_set::find`](find.md) | 指定したキーで要素を探す | + + +## 参照 +- [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/erase.md b/reference/flat_set/flat_set/erase.md index f700f70f81..76375802e9 100644 --- a/reference/flat_set/flat_set/erase.md +++ b/reference/flat_set/flat_set/erase.md @@ -6,16 +6,22 @@ * cpp23[meta cpp] ```cpp -iterator erase(iterator position); // (1) C++23 +iterator erase(iterator position); // (1) C++23 +constexpr iterator erase(iterator position); // (1) C++26 -iterator erase(const_iterator position); // (2) C++23 +iterator erase(const_iterator position); // (2) C++23 +constexpr iterator erase(const_iterator position); // (2) C++26 -size_type erase(const key_type& x); // (3) C++23 +size_type erase(const key_type& x); // (3) C++23 +constexpr size_type erase(const key_type& x); // (3) C++26 template -size_type erase(K&& x); // (4) C++23 +size_type erase(K&& x); // (4) C++23 +template +constexpr size_type erase(K&& x); // (4) C++26 -iterator erase(const_iterator first, const_iterator last); // (5) C++23 +iterator erase(const_iterator first, const_iterator last); // (5) C++23 +constexpr iterator erase(const_iterator first, const_iterator last); // (5) C++26 ``` ## 概要 @@ -137,3 +143,7 @@ int main() | [`flat_set::clear`](clear.md) | 全ての要素を削除する | | [`flat_set::insert`](insert.md) | 要素を挿入する | | [`flat_set::find`](find.md) | 指定したキーで要素を探す | + + +## 参照 +- [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/erase_if_free.md b/reference/flat_set/flat_set/erase_if_free.md index 58646f1c29..8e6d7d2e44 100644 --- a/reference/flat_set/flat_set/erase_if_free.md +++ b/reference/flat_set/flat_set/erase_if_free.md @@ -12,7 +12,14 @@ namespace std { class Predicate> typename flat_set::size_type erase_if(flat_set& c, - Predicate pred); + Predicate pred); // (1) C++23 + template + constexpr typename flat_set::size_type + erase_if(flat_set& c, + Predicate pred); // (1) C++26 } ``` @@ -69,3 +76,7 @@ int main() - [Clang](/implementation.md#clang): ?? - [GCC](/implementation.md#gcc): ?? - [Visual C++](/implementation.md#visual_cpp): ?? + + +## 参照 +- [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/extract.md b/reference/flat_set/flat_set/extract.md index dc2bbe200a..7be8b7cace 100644 --- a/reference/flat_set/flat_set/extract.md +++ b/reference/flat_set/flat_set/extract.md @@ -6,7 +6,8 @@ * cpp23[meta cpp] ```cpp -container_type extract() &&; // C++23 +container_type extract() &&; // (1) C++23 +constexpr container_type extract() &&; // (1) C++26 ``` ## 概要 @@ -75,3 +76,7 @@ int main() - [GCC](/implementation.md#gcc): ?? - [ICC](/implementation.md#icc): ?? - [Visual C++](/implementation.md#visual_cpp): ?? + + +## 参照 +- [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/find.md b/reference/flat_set/flat_set/find.md index b4fba9c70c..3a94af9924 100644 --- a/reference/flat_set/flat_set/find.md +++ b/reference/flat_set/flat_set/find.md @@ -6,15 +6,21 @@ * cpp23[meta cpp] ```cpp -iterator find(const key_type& x); // (1) C++23 +iterator find(const key_type& x); // (1) C++23 +constexpr iterator find(const key_type& x); // (1) C++26 template -iterator find(const K& x); // (2) C++23 +iterator find(const K& x); // (2) C++23 +template +constexpr iterator find(const K& x); // (2) C++26 -const_iterator find(const key_type& x) const; // (3) C++23 +const_iterator find(const key_type& x) const; // (3) C++23 +constexpr const_iterator find(const key_type& x) const; // (3) C++26 template -const_iterator find(const K& x) const; // (4) C++23 +const_iterator find(const K& x) const; // (4) C++23 +template +constexpr const_iterator find(const K& x) const; // (4) C++26 ``` ## 概要 @@ -99,3 +105,7 @@ Bob ## 関連項目 - [`contains()`](contains.md) + + +## 参照 +- [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/insert.md b/reference/flat_set/flat_set/insert.md index 669f34497d..84c7ffbe79 100644 --- a/reference/flat_set/flat_set/insert.md +++ b/reference/flat_set/flat_set/insert.md @@ -6,34 +6,77 @@ * cpp23[meta cpp] ```cpp -pair insert(const value_type& x); // (1) C++23 -pair insert(value_type&& x); // (2) C++23 - -iterator insert(const_iterator position, - const value_type& x); // (3) C++23 -iterator insert(const_iterator position, - value_type&& x); // (4) C++23 +pair + insert(const value_type& x); // (1) C++23 +constexpr pair + insert(const value_type& x); // (1) C++26 + +pair + insert(value_type&& x); // (2) C++23 +constexpr pair + insert(value_type&& x); // (2) C++26 + +iterator + insert(const_iterator position, + const value_type& x); // (3) C++23 +constexpr iterator + insert(const_iterator position, + const value_type& x); // (3) C++26 + +iterator + insert(const_iterator position, + value_type&& x); // (4) C++23 +constexpr iterator + insert(const_iterator position, + value_type&& x); // (4) C++26 template -pair insert(P&& x); // (5) C++23 +pair + insert(P&& x); // (5) C++23 +template +constexpr pair + insert(P&& x); // (5) C++26 template -iterator insert(const_iterator position, - P&&); // (6) C++23 +iterator + insert(const_iterator position, + P&&); // (6) C++23 +template +constexpr iterator + insert(const_iterator position, + P&&); // (6) C++26 template -void insert(InputIterator first, - InputIterator last); // (7) C++23 - +void + insert(InputIterator first, + InputIterator last); // (7) C++23 template -void insert(sorted_unique_t, - InputIterator first, - InputIterator last); // (8) C++23 - -void insert(initializer_list il); // (9) C++23 +constexpr void + insert(InputIterator first, + InputIterator last); // (7) C++26 -void insert(sorted_unique_t s, - initializer_list il); // (10) C++23 +template +void + insert(sorted_unique_t, + InputIterator first, + InputIterator last); // (8) C++23 +template +constexpr void + insert(sorted_unique_t, + InputIterator first, + InputIterator last); // (8) C++26 + +void + insert(initializer_list il); // (9) C++23 +constexpr void + insert(initializer_list il); // (9) C++26 + +void + insert(sorted_unique_t s, + initializer_list il); // (10) C++23 +constexpr void + insert(sorted_unique_t s, + initializer_list il); // (10) C++26 ``` * initializer_list[link /reference/initializer_list/initializer_list.md] * sorted_unique_t[link /reference/flat_set/sorted_unique_t.md] @@ -223,3 +266,7 @@ int main() | [`flat_set::insert_range`](insert_range.md) | Rangeを挿入する | | [`flat_set::emplace`](emplace.md) | 要素を直接構築する | | [`flat_set::emplace_hint`](emplace_hint.md) | ヒントを使って要素を直接構築する | + + +## 参照 +- [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/insert_range.md b/reference/flat_set/flat_set/insert_range.md index 1e67de38f1..7a83eae38a 100644 --- a/reference/flat_set/flat_set/insert_range.md +++ b/reference/flat_set/flat_set/insert_range.md @@ -7,7 +7,9 @@ ```cpp template R> -void insert_range(R&& rg); // (1) C++23 +void insert_range(R&& rg); // (1) C++23 +template R> +constexpr void insert_range(R&& rg); // (1) C++26 ``` * container-compatible-range[link /reference/exposition-only/container-compatible-range.md] @@ -77,3 +79,7 @@ int main() | [`flat_set::insert`](insert.md) | 要素を挿入する | | [`flat_set::emplace`](emplace.md) | 要素を直接構築する | | [`flat_set::emplace_hint`](emplace_hint.md) | ヒントを使って要素を直接構築する | + + +## 参照 +- [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/key_comp.md b/reference/flat_set/flat_set/key_comp.md index af9fc68623..c919f4f7f6 100644 --- a/reference/flat_set/flat_set/key_comp.md +++ b/reference/flat_set/flat_set/key_comp.md @@ -6,7 +6,8 @@ * cpp23[meta cpp] ```cpp -key_compare key_comp() const; // C++23 +key_compare key_comp() const; // (1) C++23 +constexpr key_compare key_comp() const; // (1) C++26 ``` @@ -62,3 +63,7 @@ int main() | 名前 | 説明 | |-------------------------------------|----------------------------------------------------------| | [`value_comp`](value_comp.md) | 要素比較用の関数オブジェクトを返す | + + +## 参照 +- [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/lower_bound.md b/reference/flat_set/flat_set/lower_bound.md index fe99048550..1d1af01a91 100644 --- a/reference/flat_set/flat_set/lower_bound.md +++ b/reference/flat_set/flat_set/lower_bound.md @@ -6,15 +6,21 @@ * cpp23[meta cpp] ```cpp -iterator lower_bound(const key_type& x); // (1) C++23 +iterator lower_bound(const key_type& x); // (1) C++23 +constexpr iterator lower_bound(const key_type& x); // (1) C++26 template -iterator lower_bound(const K& x); // (2) C++23 +iterator lower_bound(const K& x); // (2) C++23 +template +constexpr iterator lower_bound(const K& x); // (2) C++26 -const_iterator lower_bound(const key_type& x) const; // (3) C++23 +const_iterator lower_bound(const key_type& x) const; // (3) C++23 +constexpr const_iterator lower_bound(const key_type& x) const; // (3) C++26 template -const_iterator lower_bound(const K& x) const; // (4) C++23 +const_iterator lower_bound(const K& x) const; // (4) C++23 +template +constexpr const_iterator lower_bound(const K& x) const; // (4) C++26 ``` ## 概要 @@ -119,3 +125,7 @@ David | [`flat_set::equal_range`](equal_range.md) | 指定したキーにマッチする要素範囲を返す | | [`flat_set::find`](find.md) | 指定したキーで要素を探す | | [`flat_set::count`](count.md) | 指定したキーにマッチする要素の数を返す | + + +## 参照 +- [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/max_size.md b/reference/flat_set/flat_set/max_size.md index 4702090439..202945b73a 100644 --- a/reference/flat_set/flat_set/max_size.md +++ b/reference/flat_set/flat_set/max_size.md @@ -6,7 +6,8 @@ * cpp23[meta cpp] ```cpp -size_type max_size() const noexcept; // (1) C++23 +size_type max_size() const noexcept; // (1) C++23 +constexpr size_type max_size() const noexcept; // (1) C++26 ``` ## 概要 @@ -49,3 +50,7 @@ int main() - [Clang](/implementation.md#clang): ?? - [GCC](/implementation.md#gcc): ?? - [Visual C++](/implementation.md#visual_cpp): ?? + + +## 参照 +- [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_assign.md b/reference/flat_set/flat_set/op_assign.md index 4999cee1e2..15a3c45896 100644 --- a/reference/flat_set/flat_set/op_assign.md +++ b/reference/flat_set/flat_set/op_assign.md @@ -6,7 +6,8 @@ * cpp23[meta cpp] ```cpp -flat_set& operator=(initializer_list il); // C++23 +flat_set& operator=(initializer_list il); // (1) C++23 +constexpr flat_set& operator=(initializer_list il); // (1) C++26 ``` * initializer_list[link /reference/initializer_list/initializer_list.md] @@ -63,3 +64,7 @@ Carol - [GCC](/implementation.md#gcc): ?? - [ICC](/implementation.md#icc): ?? - [Visual C++](/implementation.md#visual_cpp): ?? + + +## 参照 +- [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_compare_3way.md b/reference/flat_set/flat_set/op_compare_3way.md index a9c38f5a9d..f7eae7213f 100644 --- a/reference/flat_set/flat_set/op_compare_3way.md +++ b/reference/flat_set/flat_set/op_compare_3way.md @@ -9,6 +9,9 @@ synth-three-way-result operator<=>(const flat_set& x, const flat_set& y); // (1) C++23 +constexpr synth-three-way-result + operator<=>(const flat_set& x, + const flat_set& y); // (1) C++26 ``` ## 概要 @@ -80,3 +83,7 @@ false - [Clang](/implementation.md#clang): ?? - [GCC](/implementation.md#gcc): ?? - [Visual C++](/implementation.md#visual_cpp): ?? + + +## 参照 +- [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 7a6fa5aafd..a46c4228f0 100644 --- a/reference/flat_set/flat_set/op_constructor.md +++ b/reference/flat_set/flat_set/op_constructor.md @@ -8,117 +8,281 @@ ```cpp // ____要素数ゼロのflat_setを構築____ -flat_set() : flat_set(key_compare()) { } // (1) C++23 +flat_set() + : flat_set(key_compare()) { } // (1) C++23 -explicit flat_set(const key_compare& comp) // (2) C++23 - : c(), compare(comp) { } +explicit + flat_set(const key_compare& comp) // (2) C++23 + : c(), compare(comp) { } +constexpr explicit + flat_set(const key_compare& comp) // (2) C++26 + : c(), compare(comp) { } template -explicit flat_set(const Allocator& a); // (3) C++23 +explicit + flat_set(const Allocator& a); // (3) C++23 +template +constexpr explicit + flat_set(const Allocator& a); // (3) C++26 template -flat_set(const key_compare& comp, const Allocator& a); // (4) C++23 +flat_set(const key_compare& comp, + const Allocator& a); // (4) C++23 +template +constexpr + flat_set(const key_compare& comp, + const Allocator& a); // (4) C++26 // ____アロケータを伴うコピー&ムーブコンストラクタ____ template - flat_set(const flat_set& x, const Allocator& a); // (5) C++26 + constexpr + flat_set(const flat_set& x, + const Allocator& a); // (5) C++26 template - flat_set(flat_set&& x, const Allocator& a); // (6) C++26 + constexpr + flat_set(flat_set&& x, + const Allocator& a); // (6) C++26 // ____container_typeから構築____ flat_set(container_type cont, - const key_compare& comp = key_compare()); // (7) C++23 + const key_compare& comp = key_compare()); // (7) C++23 +constexpr + flat_set(container_type cont, + const key_compare& comp = key_compare()); // (7) C++26 template flat_set(const container_type cont&, - const Allocator& a); // (8) C++23 + const Allocator& a); // (8) C++23 +template +constexpr + flat_set(const container_type cont&, + const Allocator& a); // (8) C++26 template flat_set(const container_type& cont, - const key_compare& comp, const Allocator& a); // (9) C++23 + const key_compare& comp, + const Allocator& a); // (9) C++23 +template +constexpr + flat_set(const container_type& cont, + const key_compare& comp, + const Allocator& a); // (9) C++26 // ____container_type(ソート済み且つ重複なし)から構築____ -flat_set(sorted_unique_t, container_type cont, - const key_compare& comp = key_compare()); // (10) C++23 +flat_set(sorted_unique_t, + container_type cont, + const key_compare& comp = key_compare()); // (10) C++23 +constexpr + flat_set(sorted_unique_t, + container_type cont, + const key_compare& comp = key_compare()); // (10) C++26 template -flat_set(sorted_unique_t, const container_type& cont, - const Allocator& a); // (11) C++23 +flat_set(sorted_unique_t, + const container_type& cont, + const Allocator& a); // (11) C++23 +template +constexpr + flat_set(sorted_unique_t, + const container_type& cont, + const Allocator& a); // (11) C++26 template -flat_set(sorted_unique_t, const container_type& cont, - const key_compare& comp, const Allocator& a); // (12) C++23 +flat_set(sorted_unique_t, + const container_type& cont, + const key_compare& comp, + const Allocator& a); // (12) C++23 +template +constexpr + flat_set(sorted_unique_t, + const container_type& cont, + const key_compare& comp, + const Allocator& a); // (12) C++26 // ____イテレータから構築____ - template -flat_set(InputIterator first, InputIterator last, const key_compare& comp = key_compare()) // (13) C++23 +flat_set(InputIterator first, + InputIterator last, + const key_compare& comp = key_compare()) // (13) C++23 : c(), compare(comp) { insert(first, last); } +template +constexpr + flat_set(InputIterator first, + InputIterator last, + const key_compare& comp = key_compare()) // (13) C++26 + : c(), compare(comp) { insert(first, last); } template -flat_set(InputIterator first, InputIterator last, const Allocator& a); // (14) C++23 +flat_set(InputIterator first, + InputIterator last, + const Allocator& a); // (14) C++23 +template +constexpr + flat_set(InputIterator first, + InputIterator last, + const Allocator& a); // (14) C++26 template -flat_set(InputIterator first, InputIterator last, - const key_compare& comp, const Allocator& a); // (15) C++23 +flat_set(InputIterator first, + InputIterator last, + const key_compare& comp, + const Allocator& a); // (15) C++23 +template +constexpr + flat_set(InputIterator first, + InputIterator last, + const key_compare& comp, + const Allocator& a); // (15) C++26 // ____イテレータ(ソート済み且つ重複なし)から構築____ - template -flat_set(sorted_unique_t s, InputIterator first, InputIterator last, - const key_compare& comp = key_compare()) // (16) C++23 +flat_set(sorted_unique_t s, + InputIterator first, + InputIterator last, + const key_compare& comp = key_compare()) // (16) C++23 : c(), compare(comp) { insert(s, first, last); } +template +constexpr + flat_set(sorted_unique_t s, + InputIterator first, + InputIterator last, + const key_compare& comp = key_compare()) // (16) C++26 + : c(), compare(comp) { insert(s, first, last); } template -flat_set(sorted_unique_t, InputIterator first, InputIterator last, const Allocator& a); // (17) C++23 +flat_set(sorted_unique_t, + InputIterator first, + InputIterator last, + const Allocator& a); // (17) C++23 +template +constexpr + flat_set(sorted_unique_t, + InputIterator first, + InputIterator last, + const Allocator& a); // (17) C++26 template -flat_set(sorted_unique_t, InputIterator first, InputIterator last, - const key_compare& comp, const Allocator& a); // (18) C++23 +flat_set(sorted_unique_t, + InputIterator first, + InputIterator last, + const key_compare& comp, + const Allocator& a); // (18) C++23 +template +constexpr + flat_set(sorted_unique_t, + InputIterator first, + InputIterator last, + const key_compare& comp, + const Allocator& a); // (18) C++26 // ____Rangeから構築____ - template R> -flat_set(from_range_t fr, R&& rg) // (19) C++23 +flat_set(from_range_t fr, + R&& rg) // (19) C++23 : flat_set(fr, forward(rg), key_compare()) { } +template R> +constexpr + flat_set(from_range_t fr, + R&& rg) // (19) C++26 + : flat_set(fr, forward(rg), key_compare()) { } template R> -flat_set(from_range_t, R&& rg, const key_compare& comp) // (20) C++23 +flat_set(from_range_t, + R&& rg, + const key_compare& comp) // (20) C++23 + : flat_set(comp) { insert_range(forward(rg)); } +template R> +constexpr + flat_set(from_range_t, + R&& rg, + const key_compare& comp) // (20) C++26 : flat_set(comp) { insert_range(forward(rg)); } template R, class Allocator> -flat_set(from_range_t, R&& rg, const Allocator& a); // (21) C++23 +flat_set(from_range_t, + R&& rg, + const Allocator& a); // (21) C++23 +template R, class Allocator> +constexpr + flat_set(from_range_t, + R&& rg, + const Allocator& a); // (21) C++26 template R, class Allocator> -flat_set(from_range_t, R&& rg, const key_compare& comp, const Allocator& a); // (22) C++23 +flat_set(from_range_t, + R&& rg, + const key_compare& comp, + const Allocator& a); // (22) C++23 +template R, class Allocator> +constexpr + flat_set(from_range_t, + R&& rg, + const key_compare& comp, + const Allocator& a); // (22) C++26 // ____initializer_listから構築____ - -flat_set(initializer_list il, const key_compare& comp = key_compare()) // (23) C++23 +flat_set(initializer_list il, + const key_compare& comp = key_compare()) // (23) C++23 : flat_set(il.begin(), il.end(), comp) { } +constexpr + flat_set(initializer_list il, + const key_compare& comp = key_compare()) // (23) C++26 + : flat_set(il.begin(), il.end(), comp) { } template -flat_set(initializer_list il, const Allocator& a); // (24) C++23 +flat_set(initializer_list il, + const Allocator& a); // (24) C++23 +template +constexpr + flat_set(initializer_list il, + const Allocator& a); // (24) C++26 template -flat_set(initializer_list il, const key_compare& comp, const Allocator& a); // (25) C++23 +flat_set(initializer_list il, + const key_compare& comp, + const Allocator& a); // (25) C++23 +template +constexpr + flat_set(initializer_list il, + const key_compare& comp, + const Allocator& a); // (25) C++26 // ____initializer_list(ソート済み且つ重複なし)から構築____ - -flat_set(sorted_unique_t s, initializer_list il, - const key_compare& comp = key_compare()) // (26) C++23 +flat_set(sorted_unique_t s, + initializer_list il, + const key_compare& comp = key_compare()) // (26) C++23 + : flat_set(s, il.begin(), il.end(), comp) { } +constexpr + flat_set(sorted_unique_t s, + initializer_list il, + const key_compare& comp = key_compare()) // (26) C++26 : flat_set(s, il.begin(), il.end(), comp) { } template -flat_set(sorted_unique_t, initializer_list il, const Allocator& a); // (27) C++23 +flat_set(sorted_unique_t, + initializer_list il, + const Allocator& a); // (27) C++23 +template +constexpr + flat_set(sorted_unique_t, + initializer_list il, + const Allocator& a); // (27) C++26 template -flat_set(sorted_unique_t, initializer_list il, - const key_compare& comp, const Allocator& a); // (28) C++23 +flat_set(sorted_unique_t, + initializer_list il, + const key_compare& comp, + const Allocator& a); // (28) C++23 +template +constexpr + flat_set(sorted_unique_t, + initializer_list il, + const key_compare& comp, + const Allocator& a); // (28) C++26 ``` * initializer_list[link /reference/initializer_list/initializer_list.md] * from_range_t[link ../../ranges/from_range_t.md] @@ -265,3 +429,7 @@ int main() | 名前 | 説明 | |---------------------------------------|--------------------------------------------| | [`uses_allocator`](uses_allocator.md) | 指定されたアロケータと合致するかをチェックする | + + +## 参照 +- [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_equal.md b/reference/flat_set/flat_set/op_equal.md index 83e8b60edf..5f282dac93 100644 --- a/reference/flat_set/flat_set/op_equal.md +++ b/reference/flat_set/flat_set/op_equal.md @@ -6,7 +6,8 @@ * cpp23[meta cpp] ```cpp -friend bool operator==(const flat_set& x, const flat_set& y); +friend bool operator==(const flat_set& x, const flat_set& y); // (1) C++23 +constexpr friend bool operator==(const flat_set& x, const flat_set& y); // (1) C++26 ``` ## 概要 @@ -69,3 +70,7 @@ true - [Clang](/implementation.md#clang): ?? - [GCC](/implementation.md#gcc): ?? - [Visual C++](/implementation.md#visual_cpp): ?? + + +## 参照 +- [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/rbegin.md b/reference/flat_set/flat_set/rbegin.md index f35e2e8f7a..965b662619 100644 --- a/reference/flat_set/flat_set/rbegin.md +++ b/reference/flat_set/flat_set/rbegin.md @@ -6,8 +6,11 @@ * cpp23[meta cpp] ```cpp -reverse_iterator rbegin() noexcept; -const_reverse_iterator rbegin() const noexcept; +reverse_iterator rbegin() noexcept; // (1) C++23 +constexpr reverse_iterator rbegin() noexcept; // (1) C++26 + +const_reverse_iterator rbegin() const noexcept; // (2) C++23 +constexpr const_reverse_iterator rbegin() const noexcept; // (2) C++26 ``` ## 概要 @@ -71,3 +74,7 @@ int main() | [`flat_set::rend`](rend.md) | 先頭の前を指す逆イテレータを取得する | | [`flat_set::crbegin`](crbegin.md) | 末尾を指す逆constイテレータを取得する | | [`flat_set::crend`](crend.md) | 先頭の前を指す逆constイテレータを取得する | + + +## 参照 +- [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/rend.md b/reference/flat_set/flat_set/rend.md index 6ba74bfb3a..b1cfaf4e92 100644 --- a/reference/flat_set/flat_set/rend.md +++ b/reference/flat_set/flat_set/rend.md @@ -6,8 +6,11 @@ * cpp23[meta cpp] ```cpp -reverse_iterator rend() noexcept; -const_reverse_iterator rend() const noexcept; +reverse_iterator rend() noexcept; // (1) C++23 +constexpr reverse_iterator rend() noexcept; // (1) C++26 + +const_reverse_iterator rend() const noexcept; // (2) C++23 +constexpr const_reverse_iterator rend() const noexcept; // (2) C++26 ``` ## 概要 @@ -64,3 +67,7 @@ int main() | [`flat_set::rbegin`](rbegin.md) | 末尾を指す逆イテレータを取得する | | [`flat_set::crbegin`](crbegin.md) | 末尾を指す逆constイテレータを取得する | | [`flat_set::crend`](crend.md) | 先頭の前を指す逆constイテレータを取得する | + + +## 参照 +- [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/replace.md b/reference/flat_set/flat_set/replace.md index 6f992f9135..544c8aa19a 100644 --- a/reference/flat_set/flat_set/replace.md +++ b/reference/flat_set/flat_set/replace.md @@ -6,7 +6,8 @@ * cpp23[meta cpp] ```cpp -void replace(container_type&& cont); // C++23 +void replace(container_type&& cont); // (1) C++23 +constexpr void replace(container_type&& cont); // (1) C++26 ``` ## 概要 @@ -91,3 +92,7 @@ int main() - [GCC](/implementation.md#gcc): ?? - [ICC](/implementation.md#icc): ?? - [Visual C++](/implementation.md#visual_cpp): ?? + + +## 参照 +- [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/size.md b/reference/flat_set/flat_set/size.md index 43cd684b59..5fdfccbc5a 100644 --- a/reference/flat_set/flat_set/size.md +++ b/reference/flat_set/flat_set/size.md @@ -6,7 +6,8 @@ * cpp23[meta cpp] ```cpp -size_type size() const noexcept; +size_type size() const noexcept; // (1) C++23 +constexpr size_type size() const noexcept; // (1) C++26 ``` ## 概要 @@ -67,3 +68,7 @@ int main () ## 関連項目 - [`empty()`](empty.md) + + +## 参照 +- [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/swap.md b/reference/flat_set/flat_set/swap.md index c0971d90f6..a7c466de95 100644 --- a/reference/flat_set/flat_set/swap.md +++ b/reference/flat_set/flat_set/swap.md @@ -6,7 +6,8 @@ * cpp23[meta cpp] ```cpp -void swap(flat_set& y) noexcept; // (1) C++23 +void swap(flat_set& y) noexcept; // (1) C++23 +constexpr void swap(flat_set& y) noexcept; // (1) C++26 ``` ## 概要 @@ -73,3 +74,7 @@ fs2 : {10, 20, 30} - [Clang](/implementation.md#clang): ?? - [GCC](/implementation.md#gcc): ?? - [Visual C++](/implementation.md#visual_cpp): ?? + + +## 参照 +- [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/swap_free.md b/reference/flat_set/flat_set/swap_free.md index a9efa2d0e5..2c3b707d92 100644 --- a/reference/flat_set/flat_set/swap_free.md +++ b/reference/flat_set/flat_set/swap_free.md @@ -7,8 +7,13 @@ ```cpp namespace std { template - void swap(flat_set& x, - flat_set& y); // (1) C++23 + void + swap(flat_set& x, + flat_set& y); // (1) C++23 + template + constexpr void + swap(flat_set& x, + flat_set& y); // (1) C++26 } ``` @@ -74,3 +79,7 @@ fs2 : {10, 20, 30} - [Clang](/implementation.md#clang): ?? - [GCC](/implementation.md#gcc): ?? - [Visual C++](/implementation.md#visual_cpp): ?? + + +## 参照 +- [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/upper_bound.md b/reference/flat_set/flat_set/upper_bound.md index aaac5c6f4e..e398983352 100644 --- a/reference/flat_set/flat_set/upper_bound.md +++ b/reference/flat_set/flat_set/upper_bound.md @@ -6,15 +6,21 @@ * cpp23[meta cpp] ```cpp -iterator upper_bound(const key_type& x); // (1) C++23 +iterator upper_bound(const key_type& x); // (1) C++23 +constexpr iterator upper_bound(const key_type& x); // (1) C++26 template -iterator upper_bound(const K& x); // (2) C++23 +iterator upper_bound(const K& x); // (2) C++23 +template +constexpr iterator upper_bound(const K& x); // (2) C++26 -const_iterator upper_bound(const key_type& x) const; // (3) C++23 +const_iterator upper_bound(const key_type& x) const; // (3) C++23 +constexpr const_iterator upper_bound(const key_type& x) const; // (3) C++26 template -const_iterator upper_bound(const K& x) const; // (4) C++23 +const_iterator upper_bound(const K& x) const; // (4) C++23 +template +constexpr const_iterator upper_bound(const K& x) const; // (4) C++26 ``` ## 概要 @@ -119,3 +125,7 @@ David | [`flat_set::equal_range`](equal_range.md) | 指定したキーにマッチする要素範囲を返す | | [`flat_set::find`](find.md) | 指定したキーで要素を探す | | [`flat_set::count`](count.md) | 指定したキーにマッチする要素の数を返す | + + +## 参照 +- [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/value_comp.md b/reference/flat_set/flat_set/value_comp.md index 5105617921..623e826fea 100644 --- a/reference/flat_set/flat_set/value_comp.md +++ b/reference/flat_set/flat_set/value_comp.md @@ -6,7 +6,8 @@ * cpp23[meta cpp] ```cpp -value_compare value_comp() const; // C++23 +value_compare value_comp() const; // (1) C++23 +constexpr value_compare value_comp() const; // (1) C++26 ``` @@ -63,3 +64,7 @@ int main() | 名前 | 説明 | |-------------------------------------|----------------------------------------------------------| | [`key_comp`](key_comp.md) | キー比較用の関数オブジェクトを取得する | + + +## 参照 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/forward_list/forward_list/assign.md b/reference/forward_list/forward_list/assign.md index 7fff11daa8..680b3dc735 100644 --- a/reference/forward_list/forward_list/assign.md +++ b/reference/forward_list/forward_list/assign.md @@ -7,11 +7,15 @@ ```cpp template -void assign(InputIterator first, InputIterator last); // (1) +void assign(InputIterator first, InputIterator last); // (1) C++11 +template +constexpr void assign(InputIterator first, InputIterator last); // (1) C++26 -void assign(size_type n, const T& t); // (2) +void assign(size_type n, const T& t); // (2) C++11 +constexpr void assign(size_type n, const T& t); // (2) C++26 -void assign(initializer_list init); // (3) +void assign(initializer_list init); // (3) C++11 +constexpr void assign(initializer_list init); // (3) C++26 ``` * initializer_list[link /reference/initializer_list/initializer_list.md] @@ -131,3 +135,4 @@ ls3 : 1 2 3 ## 参照 - [N2679 Initializer Lists for Standard Containers(Revision 1)](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2679.pdf) - (3)の経緯となる提案文書 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/forward_list/forward_list/assign_range.md b/reference/forward_list/forward_list/assign_range.md index bebec79a9c..62aab3fe2a 100644 --- a/reference/forward_list/forward_list/assign_range.md +++ b/reference/forward_list/forward_list/assign_range.md @@ -7,7 +7,9 @@ ```cpp template R> -void assign_range(R&& rg); // C++23 +void assign_range(R&& rg); // (1) C++23 +template R> +constexpr void assign_range(R&& rg); // (1) C++26 ``` ## 概要 @@ -62,3 +64,7 @@ int main() | 名前 | 説明 | |-------------------------------------------|----------------------| | [`assign`](assign.md) | コンテナに値を代入する | + + +## 参照 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/forward_list/forward_list/before_begin.md b/reference/forward_list/forward_list/before_begin.md index 6fa17a554b..e228a58d2d 100644 --- a/reference/forward_list/forward_list/before_begin.md +++ b/reference/forward_list/forward_list/before_begin.md @@ -6,8 +6,11 @@ * cpp11[meta cpp] ```cpp -iterator before_begin() noexcept; -const_iterator before_begin() const noexcept; +iterator before_begin() noexcept; // (1) C++11 +constexpr iterator before_begin() noexcept; // (1) C++26 + +const_iterator before_begin() const noexcept; // (2) C++11 +constexpr const_iterator before_begin() const noexcept; // (2) C++26 ``` ## 概要 @@ -74,3 +77,4 @@ int main() ## 参照 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/forward_list/forward_list/begin.md b/reference/forward_list/forward_list/begin.md index 2d327ecba4..ee842eab31 100644 --- a/reference/forward_list/forward_list/begin.md +++ b/reference/forward_list/forward_list/begin.md @@ -6,8 +6,11 @@ * cpp11[meta cpp] ```cpp -iterator begin() noexcept; -const_iterator begin() const noexcept; +iterator begin() noexcept; // (1) C++11 +constexpr iterator begin() noexcept; // (1) C++26 + +const_iterator begin() const noexcept; // (2) C++11 +constexpr const_iterator begin() const noexcept; // (2) C++26 ``` ## 概要 @@ -60,3 +63,4 @@ int main() ## 参照 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/forward_list/forward_list/cbefore_begin.md b/reference/forward_list/forward_list/cbefore_begin.md index 72b2a618a6..67aa935528 100644 --- a/reference/forward_list/forward_list/cbefore_begin.md +++ b/reference/forward_list/forward_list/cbefore_begin.md @@ -6,7 +6,8 @@ * cpp11[meta cpp] ```cpp -const_iterator cbefore_begin() const noexcept; +const_iterator cbefore_begin() const noexcept; // (1) C++11 +constexpr const_iterator cbefore_begin() const noexcept; // (1) C++26 ``` ## 概要 @@ -74,3 +75,4 @@ int main() ## 参照 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/forward_list/forward_list/cbegin.md b/reference/forward_list/forward_list/cbegin.md index ccf14c466f..12a19d727e 100644 --- a/reference/forward_list/forward_list/cbegin.md +++ b/reference/forward_list/forward_list/cbegin.md @@ -6,7 +6,8 @@ * cpp11[meta cpp] ```cpp -const_iterator cbegin() const noexcept; +const_iterator cbegin() const noexcept; // (1) C++11 +constexpr const_iterator cbegin() const noexcept; // (1) C++26 ``` ## 概要 @@ -59,3 +60,4 @@ int main() ## 参照 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/forward_list/forward_list/cend.md b/reference/forward_list/forward_list/cend.md index 0762ff0b91..42ff6e4ede 100644 --- a/reference/forward_list/forward_list/cend.md +++ b/reference/forward_list/forward_list/cend.md @@ -6,7 +6,8 @@ * cpp11[meta cpp] ```cpp -const_iterator cend() const noexcept; +const_iterator cend() const noexcept; // (1) C++11 +constexpr const_iterator cend() const noexcept; // (1) C++26 ``` ## 概要 @@ -62,3 +63,4 @@ int main() ## 参照 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/forward_list/forward_list/clear.md b/reference/forward_list/forward_list/clear.md index 8044c95a6d..94c47aeeb4 100644 --- a/reference/forward_list/forward_list/clear.md +++ b/reference/forward_list/forward_list/clear.md @@ -6,7 +6,8 @@ * cpp11[meta cpp] ```cpp -void clear() noexcept; +void clear() noexcept; // (1) C++11 +constexpr void clear() noexcept; // (1) C++26 ``` ## 概要 @@ -74,3 +75,4 @@ int main() ## 参照 - [LWG Issue 2231. DR 704 removes complexity guarantee for `clear()`](http://www.open-std.org/jtc1/sc22/wg21/docs/lwg-defects.html#2231) - C++03までこの関数の効果は`erase(begin(), end())`だったため、それによって線形時間の計算量が保証されていたが、C++11で効果の表記が変わったために、保証がなくなってしまっていた。C++14であらためて保証を追加。 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/forward_list/forward_list/emplace_after.md b/reference/forward_list/forward_list/emplace_after.md index 12a49f3910..7560e9209c 100644 --- a/reference/forward_list/forward_list/emplace_after.md +++ b/reference/forward_list/forward_list/emplace_after.md @@ -7,7 +7,13 @@ ```cpp template -iterator emplace_after(const_iterator position, Args&&... args); +iterator + emplace_after(const_iterator position, + Args&&... args); // (1) C++11 +template +constexpr iterator + emplace_after(const_iterator position, + Args&&... args); // (1) C++26 ``` ## 概要 @@ -80,3 +86,4 @@ int main() ## 参照 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/forward_list/forward_list/emplace_front.md b/reference/forward_list/forward_list/emplace_front.md index da5cac4fec..7d92e8ec9d 100644 --- a/reference/forward_list/forward_list/emplace_front.md +++ b/reference/forward_list/forward_list/emplace_front.md @@ -7,10 +7,11 @@ ```cpp template -void emplace_front(Args&&... args); // C++14 まで - +void emplace_front(Args&&... args); // (1) C++11 +template +reference emplace_front(Args&&... args); // (1) C++17 template -reference emplace_front(Args&&... args); // C++17 から +constexpr reference emplace_front(Args&&... args); // (1) C++26 ``` ## 概要 @@ -95,3 +96,4 @@ int main() - [P0084R0 Emplace Return Type](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2015/p0084r0.pdf) - [P0084R1 Emplace Return Type (Revision 1)](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/p0084r1.pdf) - [P0084R2 Emplace Return Type (Revision 2)](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/p0084r2.pdf) +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/forward_list/forward_list/empty.md b/reference/forward_list/forward_list/empty.md index ec0f36196a..eae5483d6b 100644 --- a/reference/forward_list/forward_list/empty.md +++ b/reference/forward_list/forward_list/empty.md @@ -6,9 +6,9 @@ * cpp11[meta cpp] ```cpp -bool empty() const noexcept; // C++11 -[[nodiscard]] bool empty() const noexcept; // C++20 -bool empty() const noexcept; // C++26 +bool empty() const noexcept; // (1) C++11 +[[nodiscard]] bool empty() const noexcept; // (1) C++20 +constexpr bool empty() const noexcept; // (1) C++26 ``` ## 概要 @@ -72,3 +72,4 @@ false - C++20で`[[nodiscard]]`が付加された - [P2422R1 Remove `nodiscard` annotations from the standard library specification](https://open-std.org/jtc1/sc22/wg21/docs/papers/2024/p2422r1.html) - C++26で`[[nodiscard]]`指定が削除された +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/forward_list/forward_list/end.md b/reference/forward_list/forward_list/end.md index af43a934cd..4746b59e3c 100644 --- a/reference/forward_list/forward_list/end.md +++ b/reference/forward_list/forward_list/end.md @@ -6,8 +6,11 @@ * cpp11[meta cpp] ```cpp -iterator end() noexcept; -const_iterator end() const noexcept; +iterator end() noexcept; // (1) C++11 +constexpr iterator end() noexcept; // (1) C++26 + +const_iterator end() const noexcept; // (2) C++11 +constexpr const_iterator end() const noexcept; // (2) C++26 ``` ## 概要 @@ -76,3 +79,4 @@ int main() ## 参照 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/forward_list/forward_list/erase_after.md b/reference/forward_list/forward_list/erase_after.md index 0bfefe65e5..127ff9e18d 100644 --- a/reference/forward_list/forward_list/erase_after.md +++ b/reference/forward_list/forward_list/erase_after.md @@ -6,9 +6,17 @@ * cpp11[meta cpp] ```cpp -iterator erase_after(const_iterator position); // (1) -iterator erase_after(const_iterator position, - const_iterator last); // (2) +iterator + erase_after(const_iterator position); // (1) C++11 +constexpr iterator + erase_after(const_iterator position); // (1) C++26 + +iterator + erase_after(const_iterator position, + const_iterator last); // (2) C++11 +constexpr iterator + erase_after(const_iterator position, + const_iterator last); // (2) C++26 ``` ## 概要 @@ -138,3 +146,4 @@ int main() ## 参照 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/forward_list/forward_list/erase_free.md b/reference/forward_list/forward_list/erase_free.md index 1e686e63bc..dcf9920f13 100644 --- a/reference/forward_list/forward_list/erase_free.md +++ b/reference/forward_list/forward_list/erase_free.md @@ -10,7 +10,7 @@ namespace std { typename forward_list::size_type erase(forward_list& c, const U& value); // (1) C++20 template - typename forward_list::size_type + constexpr typename forward_list::size_type erase(forward_list& c, const U& value); // (1) C++26 } ``` @@ -110,3 +110,4 @@ int main() { - [R1115R3 Improving the Return Value of Erase-Like Algorithms II: Free `erase`/`erase_if`](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2019/p1115r3.pdf) - [P2248R8 Enabling list-initialization for algorithms](https://open-std.org/jtc1/sc22/wg21/docs/papers/2024/p2248r8.html) - C++26で波カッコ初期化 (リスト初期化) に対応した +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/forward_list/forward_list/erase_if_free.md b/reference/forward_list/forward_list/erase_if_free.md index 85a1963d31..170448c115 100644 --- a/reference/forward_list/forward_list/erase_if_free.md +++ b/reference/forward_list/forward_list/erase_if_free.md @@ -7,7 +7,9 @@ ```cpp namespace std { template - typename forward_list::size_type erase_if(forward_list& c, Predicate pred); + typename forward_list::size_type erase_if(forward_list& c, Predicate pred); // (1) C++20 + template + constexpr typename forward_list::size_type erase_if(forward_list& c, Predicate pred); // (1) C++26 } ``` @@ -67,3 +69,4 @@ int main() ## 参照 - [P1209R0 Adopt consistent container erasure from Library Fundamentals 2](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2018/p1209r0.html) - [R1115R3 Improving the Return Value of Erase-Like Algorithms II: Free `erase`/`erase_if`](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2019/p1115r3.pdf) +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/forward_list/forward_list/front.md b/reference/forward_list/forward_list/front.md index cda1c14c77..817b8f4380 100644 --- a/reference/forward_list/forward_list/front.md +++ b/reference/forward_list/forward_list/front.md @@ -6,8 +6,11 @@ * cpp11[meta cpp] ```cpp -reference front(); -const_reference front() const; +reference front(); // (1) C++11 +constexpr reference front(); // (1) C++26 + +const_reference front() const; // (2) C++11 +constexpr const_reference front() const; // (2) C++26 ``` ## 概要 @@ -54,3 +57,4 @@ int main() ## 参照 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/forward_list/forward_list/get_allocator.md b/reference/forward_list/forward_list/get_allocator.md index c57e08528a..98595d811d 100644 --- a/reference/forward_list/forward_list/get_allocator.md +++ b/reference/forward_list/forward_list/get_allocator.md @@ -6,7 +6,8 @@ * cpp11[meta cpp] ```cpp -allocator_type get_allocator() const noexcept; +allocator_type get_allocator() const noexcept; // (1) C++11 +constexpr allocator_type get_allocator() const noexcept; // (1) C++26 ``` ## 概要 @@ -56,3 +57,4 @@ int main() ## 参照 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/forward_list/forward_list/insert_after.md b/reference/forward_list/forward_list/insert_after.md index ef712000b9..88496c15bc 100644 --- a/reference/forward_list/forward_list/insert_after.md +++ b/reference/forward_list/forward_list/insert_after.md @@ -6,18 +6,46 @@ * cpp11[meta cpp] ```cpp -iterator insert_after(const_iterator position, const T& x); // (1) -iterator insert_after(const_iterator position, T&& x); // (2) -iterator insert_after(const_iterator position, size_type n, - const T& x); // (3) +iterator + insert_after(const_iterator position, + const T& x); // (1) C++11 +constexpr iterator + insert_after(const_iterator position, + const T& x); // (1) C++26 + +iterator + insert_after(const_iterator position, + T&& x); // (2) C++11 +constexpr iterator + insert_after(const_iterator position, + T&& x); // (2) C++26 + +iterator + insert_after(const_iterator position, + size_type n, + const T& x); // (3) C++11 +constexpr iterator + insert_after(const_iterator position, + size_type n, + const T& x); // (3) C++26 template -iterator insert_after(const_iterator position, - InputIterator first, - InputIterator last); // (4) - -iterator insert_after(const_iterator position, - initializer_list il); // (5) +iterator + insert_after(const_iterator position, + InputIterator first, + InputIterator last); // (4) C++11 +template +constexpr iterator + insert_after(const_iterator position, + InputIterator first, + InputIterator last); // (4) C++26 + +iterator + insert_after(const_iterator position, + initializer_list il); // (5) C++11 +constexpr iterator + insert_after(const_iterator position, + initializer_list il); // (5) C++26 ``` * initializer_list[link /reference/initializer_list/initializer_list.md] @@ -140,3 +168,4 @@ insert initializer_list : 1 2 3 4 5 6 ## 参照 - [N2679 Initializer Lists for Standard Containers(Revision 1)](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2679.pdf) - (5)の経緯となる提案文書 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/forward_list/forward_list/insert_range_after.md b/reference/forward_list/forward_list/insert_range_after.md index 150f9b3c16..1afff85d37 100644 --- a/reference/forward_list/forward_list/insert_range_after.md +++ b/reference/forward_list/forward_list/insert_range_after.md @@ -7,7 +7,13 @@ ```cpp template R> -iterator insert_range_after(const_iterator pos, R&& rg); // C++23 +iterator + insert_range_after(const_iterator pos, + R&& rg); // (1) C++23 +template R> +constexpr iterator + insert_range_after(const_iterator pos, + R&& rg); // (1) C++26 ``` ## 概要 @@ -59,3 +65,7 @@ int main() |-------------------------------------------|----------------------| | [`insert_after`](insert_after.md) | 任意の位置への要素挿入 | | [`emplace_after`](emplace_after.md) | 任意の位置への直接構築による要素挿入 | + + +## 参照 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/forward_list/forward_list/max_size.md b/reference/forward_list/forward_list/max_size.md index 4187ac89b3..b82d2a6f59 100644 --- a/reference/forward_list/forward_list/max_size.md +++ b/reference/forward_list/forward_list/max_size.md @@ -6,7 +6,8 @@ * cpp11[meta cpp] ```cpp -size_type max_size() const noexcept; +size_type max_size() const noexcept; // (1) C++11 +constexpr size_type max_size() const noexcept; // (1) C++26 ``` ## 概要 @@ -58,3 +59,4 @@ int main() ## 参照 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/forward_list/forward_list/merge.md b/reference/forward_list/forward_list/merge.md index 8401d1f0ad..97230d0463 100644 --- a/reference/forward_list/forward_list/merge.md +++ b/reference/forward_list/forward_list/merge.md @@ -6,14 +6,21 @@ * cpp11[meta cpp] ```cpp -void merge(forward_list& x); // (1) -void merge(forward_list&& x); // (2) +void merge(forward_list& x); // (1) C++11 +constexpr void merge(forward_list& x); // (1) C++26 +void merge(forward_list&& x); // (2) C++11 +constexpr void merge(forward_list&& x); // (2) C++26 + +template +void merge(forward_list& x, Compare comp); // (3) C++11 template -void merge(forward_list& x, Compare comp); // (3) +constexpr void merge(forward_list& x, Compare comp); // (3) C++26 template -void merge(forward_list&& x, Compare comp); // (4) +void merge(forward_list&& x, Compare comp); // (4) C++11 +template +constexpr void merge(forward_list&& x, Compare comp); // (4) C++26 ``` ## 概要 @@ -94,3 +101,4 @@ int main() - [LWG Issue 2045. `forward_list::merge` and `forward_list::splice_after` with unequal allocators](http://www.open-std.org/jtc1/sc22/wg21/docs/lwg-defects.html#2045) - [LWG Issue 2122. `merge()` stability for lists versus forward lists](http://www.open-std.org/jtc1/sc22/wg21/docs/lwg-defects.html#2122) - [LWG Issue 2123. `merge()` allocator requirements for lists versus forward lists](http://www.open-std.org/jtc1/sc22/wg21/docs/lwg-defects.html#2123) +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/forward_list/forward_list/op_assign.md b/reference/forward_list/forward_list/op_assign.md index f9668a31ed..2cf2351845 100644 --- a/reference/forward_list/forward_list/op_assign.md +++ b/reference/forward_list/forward_list/op_assign.md @@ -6,11 +6,17 @@ * cpp11[meta cpp] ```cpp -forward_list& operator=(const forward_list& x); // (1) -forward_list& operator=(forward_list&& x); // (2) +forward_list& operator=(const forward_list& x); // (1) C++11 +constexpr forward_list& operator=(const forward_list& x); // (1) C++26 + +forward_list& operator=(forward_list&& x); // (2) C++11 forward_list& operator=(forward_list&& x) - noexcept(allocator_traits::is_always_equal::value); // (2) C++ 17 -forward_list& operator=(initializer_list); // (3) + noexcept(allocator_traits::is_always_equal::value); // (2) C++17 +constexpr forward_list& operator=(forward_list&& x) + noexcept(allocator_traits::is_always_equal::value); // (2) C++26 + +forward_list& operator=(initializer_list); // (3) C++11 +constexpr forward_list& operator=(initializer_list); // (3) C++26 ``` * initializer_list[link /reference/initializer_list/initializer_list.md] @@ -109,3 +115,4 @@ int main() - (3)の経緯となる提案文書 - [N4258 Cleaning-up noexcept in the Library, Rev 3](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n4258.pdf) - `noexcept` 追加の経緯となる提案文書 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/forward_list/forward_list/op_compare_3way.md b/reference/forward_list/forward_list/op_compare_3way.md index ab8049991d..4bdb301320 100644 --- a/reference/forward_list/forward_list/op_compare_3way.md +++ b/reference/forward_list/forward_list/op_compare_3way.md @@ -10,6 +10,10 @@ namespace std { synth-three-way-result operator<=>(const forward_list& x, const forward_list& y); // (1) C++20 + template + constexpr synth-three-way-result + operator<=>(const forward_list& x, + const forward_list& y); // (1) C++26 } ``` @@ -81,3 +85,4 @@ int main () ## 参照 - [P1614R2 The Mothership has Landed](https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2019/p1614r2.html) - C++20での三方比較演算子の追加と、関連する演算子の自動導出 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/forward_list/forward_list/op_constructor.md b/reference/forward_list/forward_list/op_constructor.md index 4d6c1bd270..38b877b81c 100644 --- a/reference/forward_list/forward_list/op_constructor.md +++ b/reference/forward_list/forward_list/op_constructor.md @@ -6,41 +6,78 @@ * cpp11[meta cpp] ```cpp -forward_list(); // (1) C++14 -explicit forward_list(const Allocator& a); // (2) C++14 +forward_list(); // (1) C++14 +constexpr forward_list(); // (1) C++26 -explicit forward_list(const Allocator& a = Allocator()); // (1) + (2) C++11 +explicit forward_list(const Allocator& a); // (2) C++14 +constexpr explicit forward_list(const Allocator& a); // (2) C++26 + +explicit forward_list(const Allocator& a = Allocator()); // (1) + (2) C++11まで forward_list(size_type n, const T& value, - const Allocator& a = Allocator()); // (3) C++11 - -explicit forward_list(size_type n); // (4) C++11 -explicit forward_list(size_type n, - const Allocator& a = Allocator()); // (4) C++14 + const Allocator& a = Allocator()); // (3) C++11 +constexpr + forward_list(size_type n, + const T& value, + const Allocator& a = Allocator()); // (3) C++26 + +explicit + forward_list(size_type n); // (4) C++11 +explicit + forward_list(size_type n, + const Allocator& a = Allocator()); // (4) C++14 +constexpr explicit + forward_list(size_type n, + const Allocator& a = Allocator()); // (4) C++26 template forward_list(InputIterator first, InputIterator last, - const Allocator& a = Allocator()); // (5) C++11 + const Allocator& a = Allocator()); // (5) C++11 +template +constexpr + forward_list(InputIterator first, + InputIterator last, + const Allocator& a = Allocator()); // (5) C++26 + +forward_list(const forward_list& x); // (6) C++11 +constexpr forward_list(const forward_list& x); // (6) C++26 -forward_list(const forward_list& x); // (6) C++11 -forward_list(forward_list&& x); // (7) C++11 +forward_list(forward_list&& x); // (7) C++11 +constexpr forward_list(forward_list&& x); // (7) C++26 -forward_list(const forward_list& x, const Allocator& a); // (8) C++11 forward_list(const forward_list& x, - const type_identity_t& a); // (8) C++23 + const Allocator& a); // (8) C++11 +forward_list(const forward_list& x, + const type_identity_t& a); // (8) C++23 +constexpr + forward_list(const forward_list& x, + const type_identity_t& a); // (8) C++26 -forward_list(forward_list&& x, const Allocator& a); // (9) C++11 forward_list(forward_list&& x, - const type_identity_t& a); // (9) C++23 + const Allocator& a); // (9) C++11 +forward_list(forward_list&& x, + const type_identity_t& a); // (9) C++23 +constexpr + forward_list(forward_list&& x, + const type_identity_t& a); // (9) C++26 forward_list(initializer_list il, - const Allocator& a = Allocator()); // (10) C++11 + const Allocator& a = Allocator()); // (10) C++11 +constexpr + forward_list(initializer_list il, + const Allocator& a = Allocator()); // (10) C++26 template R> -forward_list(from_range_t, R&& rg, - const Allocator& a = Allocator()); // (11) C++23 +forward_list(from_range_t, + R&& rg, + const Allocator& a = Allocator()); // (11) C++23 +template R> +constexpr + forward_list(from_range_t, + R&& rg, + const Allocator& a = Allocator()); // (11) C++26 ``` * type_identity_t[link /reference/type_traits/type_identity.md] * initializer_list[link /reference/initializer_list/initializer_list.md] @@ -202,3 +239,4 @@ ls7 : 1 2 3 なお、Discussion の例はアロケータの型が誤っているので注意 - [P1518R2 Stop Overconstraining Allocators in Container Deduction Guides](https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2021/p1518r2.html) - C++23でのアロケータ引数を`type_identity_t`で包む変更 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/forward_list/forward_list/op_destructor.md b/reference/forward_list/forward_list/op_destructor.md index d050c8e7b6..10cd1e6359 100644 --- a/reference/forward_list/forward_list/op_destructor.md +++ b/reference/forward_list/forward_list/op_destructor.md @@ -6,7 +6,8 @@ * cpp11[meta cpp] ```cpp -~forward_list(); +~forward_list(); // (1) C++11 +constexpr ~forward_list(); // (1) C++26 ``` ## 概要 @@ -33,3 +34,4 @@ ## 参照 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/forward_list/forward_list/op_equal.md b/reference/forward_list/forward_list/op_equal.md index 2864b05c32..0cb9ef571d 100644 --- a/reference/forward_list/forward_list/op_equal.md +++ b/reference/forward_list/forward_list/op_equal.md @@ -9,6 +9,9 @@ namespace std { template bool operator==(const forward_list& x, const forward_list& y); // (1) C++11 + template + constexpr bool operator==(const forward_list& x, + const forward_list& y); // (1) C++26 } ``` @@ -80,3 +83,4 @@ false ## 参照 - [LWG Issue 2257. Simplify container requirements with the new algorithms](http://www.open-std.org/jtc1/sc22/wg21/docs/lwg-defects.html#2257) - C++14から、2つ目のイテレータ範囲のendイテレータをとる`equal()`アルゴリズムを使用するようになった。 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/forward_list/forward_list/op_greater.md b/reference/forward_list/forward_list/op_greater.md index b1a193aa33..0396a4333c 100644 --- a/reference/forward_list/forward_list/op_greater.md +++ b/reference/forward_list/forward_list/op_greater.md @@ -10,6 +10,9 @@ namespace std { template bool operator>(const forward_list& x, const forward_list& y); // (1) C++11 + template + constexpr bool operator>(const forward_list& x, + const forward_list& y); // (1) C++26 } ``` @@ -61,3 +64,4 @@ true ## 参照 - [P1614R2 The Mothership has Landed](https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2019/p1614r2.html) - C++20での三方比較演算子の追加と、関連する演算子の自動導出 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/forward_list/forward_list/op_greater_equal.md b/reference/forward_list/forward_list/op_greater_equal.md index 8454428fbf..2034b291ad 100644 --- a/reference/forward_list/forward_list/op_greater_equal.md +++ b/reference/forward_list/forward_list/op_greater_equal.md @@ -10,6 +10,9 @@ namespace std { template bool operator>=(const forward_list& x, const forward_list& y); // (1) C++11 + template + constexpr bool operator>=(const forward_list& x, + const forward_list& y); // (1) C++26 } ``` @@ -61,3 +64,4 @@ true ## 参照 - [P1614R2 The Mothership has Landed](https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2019/p1614r2.html) - C++20での三方比較演算子の追加と、関連する演算子の自動導出 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/forward_list/forward_list/op_less.md b/reference/forward_list/forward_list/op_less.md index c89361bfdf..75d3f134e3 100644 --- a/reference/forward_list/forward_list/op_less.md +++ b/reference/forward_list/forward_list/op_less.md @@ -10,6 +10,9 @@ namespace std { template bool operator<(const forward_list& x, const forward_list& y); // (1) C++11 + template + constexpr bool operator<(const forward_list& x, + const forward_list& y); // (1) C++26 } ``` @@ -71,3 +74,4 @@ true ## 参照 - [P1614R2 The Mothership has Landed](https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2019/p1614r2.html) - C++20での三方比較演算子の追加と、関連する演算子の自動導出 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/forward_list/forward_list/op_less_equal.md b/reference/forward_list/forward_list/op_less_equal.md index 806877e6dd..6df1005e45 100644 --- a/reference/forward_list/forward_list/op_less_equal.md +++ b/reference/forward_list/forward_list/op_less_equal.md @@ -10,6 +10,9 @@ namespace std { template bool operator<=(const forward_list& x, const forward_list& y); // (1) C++11 + template + constexpr bool operator<=(const forward_list& x, + const forward_list& y); // (1) C++26 } ``` @@ -62,3 +65,4 @@ true ## 参照 - [P1614R2 The Mothership has Landed](https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2019/p1614r2.html) - C++20での三方比較演算子の追加と、関連する演算子の自動導出 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/forward_list/forward_list/op_not_equal.md b/reference/forward_list/forward_list/op_not_equal.md index c4cf3cdc2e..7883e0c317 100644 --- a/reference/forward_list/forward_list/op_not_equal.md +++ b/reference/forward_list/forward_list/op_not_equal.md @@ -10,6 +10,9 @@ namespace std { template bool operator!=(const forward_list& x, const forward_list& y); // (1) C++11 + template + constexpr bool operator!=(const forward_list& x, + const forward_list& y); // (1) C++26 } ``` @@ -71,3 +74,4 @@ true ## 参照 - [P1614R2 The Mothership has Landed](https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2019/p1614r2.html) - C++20での三方比較演算子の追加と、関連する演算子の自動導出 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/forward_list/forward_list/pop_front.md b/reference/forward_list/forward_list/pop_front.md index 7630d08369..4ad84bd918 100644 --- a/reference/forward_list/forward_list/pop_front.md +++ b/reference/forward_list/forward_list/pop_front.md @@ -6,7 +6,8 @@ * cpp11[meta cpp] ```cpp -void pop_front(); +void pop_front(); // (1) C++11 +constexpr void pop_front(); // (1) C++26 ``` ## 概要 @@ -64,3 +65,4 @@ int main() ## 参照 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/forward_list/forward_list/prepend_range.md b/reference/forward_list/forward_list/prepend_range.md index 9f714fb704..c09efcc85b 100644 --- a/reference/forward_list/forward_list/prepend_range.md +++ b/reference/forward_list/forward_list/prepend_range.md @@ -7,7 +7,9 @@ ```cpp template R> -void prepend_range(R&& rg); // C++23 +void prepend_range(R&& rg); // (1) C++23 +template R> +constexpr void prepend_range(R&& rg); // (1) C++26 ``` ## 概要 @@ -55,3 +57,7 @@ int main() |-------------------------------------------|----------------------| | [`push_front`](push_front.md) | 先頭に要素を追加する | | [`emplace_front`](emplace_front.md) | 先頭に要素を直接構築で追加する | + + +## 参照 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/forward_list/forward_list/push_front.md b/reference/forward_list/forward_list/push_front.md index 2b3d46a407..3d50a5c2f6 100644 --- a/reference/forward_list/forward_list/push_front.md +++ b/reference/forward_list/forward_list/push_front.md @@ -6,8 +6,11 @@ * cpp11[meta cpp] ```cpp -void push_front(const T& x); -void push_front(T&& x); +void push_front(const T& x); // (1) C++11 +constexpr void push_front(const T& x); // (1) C++26 + +void push_front(T&& x); // (2) C++11 +constexpr void push_front(T&& x); // (2) C++26 ``` ## 概要 @@ -67,3 +70,4 @@ world ## 参照 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/forward_list/forward_list/remove.md b/reference/forward_list/forward_list/remove.md index 582523dcc9..8ecfe974e8 100644 --- a/reference/forward_list/forward_list/remove.md +++ b/reference/forward_list/forward_list/remove.md @@ -6,8 +6,9 @@ * cpp11[meta cpp] ```cpp -void remove(const T& value); // (1) C++11 -size_type remove(const T& value); // (1) C++20 +void remove(const T& value); // (1) C++11 +size_type remove(const T& value); // (1) C++20 +constexpr size_type remove(const T& value); // (1) C++26 ``` ## 概要 @@ -70,3 +71,4 @@ int main() ## 参照 - [P0646R1 Improving the Return Value of Erase-Like Algorithms I: list/forward list](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2018/p0646r1.pdf) +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/forward_list/forward_list/remove_if.md b/reference/forward_list/forward_list/remove_if.md index bb72b799ff..dee94a9029 100644 --- a/reference/forward_list/forward_list/remove_if.md +++ b/reference/forward_list/forward_list/remove_if.md @@ -7,10 +7,11 @@ ```cpp template -void remove_if(Predicate pred); // (1) C++11 - +void remove_if(Predicate pred); // (1) C++11 +template +size_type remove_if(Predicate pred); // (1) C++20 template -size_type remove_if(Predicate pred); // (1) C++20 +constexpr size_type remove_if(Predicate pred); // (1) C++26 ``` ## 概要 @@ -73,3 +74,4 @@ int main() ## 参照 - [P0646R1 Improving the Return Value of Erase-Like Algorithms I: list/forward list](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2018/p0646r1.pdf) +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/forward_list/forward_list/resize.md b/reference/forward_list/forward_list/resize.md index c96381f5d8..9abc6a05a5 100644 --- a/reference/forward_list/forward_list/resize.md +++ b/reference/forward_list/forward_list/resize.md @@ -6,8 +6,11 @@ * cpp11[meta cpp] ```cpp -void resize(size_type sz); // (1) -void resize(size_type sz, const value_type& c); // (2) +void resize(size_type sz); // (1) C++11 +constexpr void resize(size_type sz); // (1) C++26 + +void resize(size_type sz, const value_type& c); // (2) C++11 +constexpr void resize(size_type sz, const value_type& c); // (2) C++26 ``` ## 概要 @@ -84,3 +87,4 @@ int main() - [Visual C++](/implementation.md#visual_cpp): ?? ## 参照 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/forward_list/forward_list/reverse.md b/reference/forward_list/forward_list/reverse.md index d7db00bab5..3d60f12a8f 100644 --- a/reference/forward_list/forward_list/reverse.md +++ b/reference/forward_list/forward_list/reverse.md @@ -6,7 +6,8 @@ * cpp11[meta cpp] ```cpp -void reverse() noexcept; +void reverse() noexcept; // (1) C++11 +constexpr void reverse() noexcept; // (1) C++26 ``` ## 概要 @@ -66,3 +67,4 @@ int main() ## 参照 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/forward_list/forward_list/sort.md b/reference/forward_list/forward_list/sort.md index 1f1e40f0a2..6c51f58d1f 100644 --- a/reference/forward_list/forward_list/sort.md +++ b/reference/forward_list/forward_list/sort.md @@ -6,8 +6,13 @@ * cpp11[meta cpp] ```cpp -void sort(); -template void sort(Compare comp); +void sort(); // (1) C++11 +constexpr void sort(); // (1) C++26 + +template +void sort(Compare comp); // (2) C++11 +template +constexpr void sort(Compare comp); // (2) C++26 ``` ## 概要 @@ -74,3 +79,4 @@ int main() ## 参照 - [LWG Issue 2122. `merge()` stability for lists versus forward lists](http://www.open-std.org/jtc1/sc22/wg21/docs/lwg-defects.html#2122) +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/forward_list/forward_list/splice_after.md b/reference/forward_list/forward_list/splice_after.md index 7e328b50e0..b9b2108474 100644 --- a/reference/forward_list/forward_list/splice_after.md +++ b/reference/forward_list/forward_list/splice_after.md @@ -6,21 +6,59 @@ * cpp11[meta cpp] ```cpp -void splice_after(const_iterator position, forward_list& x); // (1) -void splice_after(const_iterator position, forward_list&& x); // (2) - -void splice_after(const_iterator position, forward_list& x, - const_iterator i); // (3) - -void splice_after(const_iterator position, forward_list&& x, - const_iterator i); // (4) - -void splice_after(const_iterator position, forward_list& x, - const_iterator first, const_iterator last); // (5) - -void splice_after(const_iterator position, forward_list&& x, - const_iterator first, const_iterator last); // (6) - +void + splice_after(const_iterator position, + forward_list& x); // (1) C++11 +constexpr void + splice_after(const_iterator position, + forward_list& x); // (1) C++26 + +void + splice_after(const_iterator position, + forward_list&& x); // (2) C++11 +constexpr void + splice_after(const_iterator position, + forward_list&& x); // (2) C++26 + +void + splice_after(const_iterator position, + forward_list& x, + const_iterator i); // (3) C++11 +constexpr void + splice_after(const_iterator position, + forward_list& x, + const_iterator i); // (3) C++26 + +void + splice_after(const_iterator position, + forward_list&& x, + const_iterator i); // (4) C++11 +constexpr void + splice_after(const_iterator position, + forward_list&& x, + const_iterator i); // (4) C++26 + +void + splice_after(const_iterator position, + forward_list& x, + const_iterator first, + const_iterator last); // (5) C++11 +constexpr void + splice_after(const_iterator position, + forward_list& x, + const_iterator first, + const_iterator last); // (5) C++26 + +void + splice_after(const_iterator position, + forward_list&& x, + const_iterator first, + const_iterator last); // (6) C++11 +constexpr void + splice_after(const_iterator position, + forward_list&& x, + const_iterator first, + const_iterator last); // (6) C++26 ``` ## 概要 @@ -133,3 +171,4 @@ int main() - [LWG Issue 2222. Inconsistency in description of `forward_list::splice_after` single-element overload](http://www.open-std.org/jtc1/sc22/wg21/docs/lwg-defects.html#2222) - (3)と(4)のオーバーロードについて、有効性が継続される対象が、`*i`となっていたが、`*++i`の間違いであったため、C++14で修正された。 - [LWG Issue 3017. `list` `splice` functions should use `addressof`](https://wg21.cmeerw.net/lwg/issue3017) +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/forward_list/forward_list/swap.md b/reference/forward_list/forward_list/swap.md index 8db3d4c4b2..5084d1824d 100644 --- a/reference/forward_list/forward_list/swap.md +++ b/reference/forward_list/forward_list/swap.md @@ -6,12 +6,18 @@ * cpp11[meta cpp] ```cpp -void swap(forward_list& x); // (1) C++11 - -void swap(forward_list& x) - noexcept( - allocator_traits::is_always_equal::value - ); // (1) C++17 +void + swap(forward_list& x); // (1) C++11 +void + swap(forward_list& x) + noexcept( + allocator_traits::is_always_equal::value + ); // (1) C++17 +constexpr void + swap(forward_list& x) + noexcept( + allocator_traits::is_always_equal::value + ); // (1) C++26 ``` * allocator_traits[link /reference/memory/allocator_traits.md] @@ -84,3 +90,4 @@ int main() ## 参照 - [N4258 Cleaning-up noexcept in the Library, Rev 3](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n4258.pdf) - `noexcept` 追加の経緯となる提案文書 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/forward_list/forward_list/swap_free.md b/reference/forward_list/forward_list/swap_free.md index 93a7f90c09..16206ff9e9 100644 --- a/reference/forward_list/forward_list/swap_free.md +++ b/reference/forward_list/forward_list/swap_free.md @@ -7,13 +7,19 @@ ```cpp namespace std { template - void swap(forward_list& x, - forward_list& y); // (1) C++11 - + void + swap(forward_list& x, + forward_list& y); // (1) C++11 + template + void + swap(forward_list& x, + forward_list& y) + noexcept(noexcept(x.swap(y))); // (1) C++17 template - void swap(forward_list& x, - forward_list& y) - noexcept(noexcept(x.swap(y))); // (1) C++17 + constexpr void + swap(forward_list& x, + forward_list& y) + noexcept(noexcept(x.swap(y))); // (1) C++26 } ``` @@ -79,3 +85,4 @@ ls2 : {4 5 6 } ## 参照 - [N4258 Cleaning-up noexcept in the Library, Rev 3](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n4258.pdf) - `noexcept` 追加の経緯となる提案文書 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/forward_list/forward_list/unique.md b/reference/forward_list/forward_list/unique.md index e1e6b520a8..06bb3ec9c5 100644 --- a/reference/forward_list/forward_list/unique.md +++ b/reference/forward_list/forward_list/unique.md @@ -6,14 +6,16 @@ * cpp11[meta cpp] ```cpp -void unique(); // (1) C++11 -size_type unique(); // (1) C++20 +void unique(); // (1) C++11 +size_type unique(); // (1) C++20 +constexpr size_type unique(); // (1) C++26 template -void unique(BinaryPredicate pred); // (2) C++11 - +void unique(BinaryPredicate pred); // (2) C++11 +template +size_type unique(BinaryPredicate pred); // (2) C++20 template -size_type unique(BinaryPredicate pred); // (2) C++20 +constexpr size_type unique(BinaryPredicate pred); // (2) C++26 ``` ## 概要 @@ -89,3 +91,4 @@ int main() ## 参照 - [P0646R1 Improving the Return Value of Erase-Like Algorithms I: list/forward list](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2018/p0646r1.pdf) +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/list/list/append_range.md b/reference/list/list/append_range.md index 9fd2512697..b577a253ae 100644 --- a/reference/list/list/append_range.md +++ b/reference/list/list/append_range.md @@ -7,7 +7,9 @@ ```cpp template R> -void append_range(R&& rg); // C++23 +void append_range(R&& rg); // (1) C++23 +template R> +constexpr void append_range(R&& rg); // (1) C++26 ``` ## 概要 @@ -63,3 +65,7 @@ int main() |-------------------------------------------|----------------------| | [`push_back`](push_back.md) | 末尾に要素を追加する | | [`emplace_back`](emplace_back.md) | 末尾に要素を直接構築で追加する | + + +## 参照 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/list/list/assign.md b/reference/list/list/assign.md index 0d29a514b5..bb84635288 100644 --- a/reference/list/list/assign.md +++ b/reference/list/list/assign.md @@ -6,10 +6,15 @@ ```cpp template -void assign(InputIterator first, InputIterator last); // (1) +void assign(InputIterator first, InputIterator last); // (1) C++03 +template +constexpr void assign(InputIterator first, InputIterator last); // (1) C++26 + +void assign(size_type n, const T& t); // (2) C++03 +constexpr void assign(size_type n, const T& t); // (2) C++26 -void assign(size_type n, const T& t); // (2) -void assign(initializer_list init); // (3) C++11 +void assign(initializer_list init); // (3) C++11 +constexpr void assign(initializer_list init); // (3) C++26 ``` * initializer_list[link /reference/initializer_list/initializer_list.md] @@ -119,3 +124,4 @@ ls3 : 1 2 3 ## 参照 - [N2679 Initializer Lists for Standard Containers(Revision 1)](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2679.pdf) - (3)の経緯となる提案文書 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/list/list/assign_range.md b/reference/list/list/assign_range.md index 6a73d61c4d..c5a3bb8aa6 100644 --- a/reference/list/list/assign_range.md +++ b/reference/list/list/assign_range.md @@ -7,7 +7,9 @@ ```cpp template R> -void assign_range(R&& rg); // C++23 +void assign_range(R&& rg); // (1) C++23 +template R> +constexpr void assign_range(R&& rg); // (1) C++26 ``` ## 概要 @@ -62,3 +64,7 @@ int main() | 名前 | 説明 | |-------------------------------------------|----------------------| | [`assign`](assign.md) | コンテナに値を代入する | + + +## 参照 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/list/list/back.md b/reference/list/list/back.md index 45c392b0bb..2068b94027 100644 --- a/reference/list/list/back.md +++ b/reference/list/list/back.md @@ -5,8 +5,11 @@ * function[meta id-type] ```cpp -reference back(); // (1) -const_reference back() const; // (2) +reference back(); // (1) C++03 +constexpr reference back(); // (1) C++26 + +const_reference back() const; // (2) C++03 +constexpr const_reference back() const; // (2) C++26 ``` ## 概要 @@ -42,3 +45,7 @@ int main() ``` 4 ``` + + +## 参照 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/list/list/begin.md b/reference/list/list/begin.md index 1ed00be3fe..022771b4f7 100644 --- a/reference/list/list/begin.md +++ b/reference/list/list/begin.md @@ -5,10 +5,13 @@ * function[meta id-type] ```cpp -iterator begin(); // (1) C++03 -iterator begin() noexcept; // (1) C++11 -const_iterator begin() const; // (2) C++03 -const_iterator begin() const noexcept; // (2) C++11 +iterator begin(); // (1) C++03 +iterator begin() noexcept; // (1) C++11 +constexpr iterator begin() noexcept; // (1) C++26 + +const_iterator begin() const; // (2) C++03 +const_iterator begin() const noexcept; // (2) C++11 +constexpr const_iterator begin() const noexcept; // (2) C++26 ``` ## 概要 @@ -49,3 +52,4 @@ int main() ``` ## 参照 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/list/list/cbegin.md b/reference/list/list/cbegin.md index 823a35e6fa..65d864cd06 100644 --- a/reference/list/list/cbegin.md +++ b/reference/list/list/cbegin.md @@ -6,7 +6,8 @@ * cpp11[meta cpp] ```cpp -const_iterator cbegin() const noexcept; +const_iterator cbegin() const noexcept; // (1) C++11 +constexpr const_iterator cbegin() const noexcept; // (1) C++26 ``` ## 概要 @@ -59,3 +60,4 @@ int main() ## 参照 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/list/list/cend.md b/reference/list/list/cend.md index 1899bd3a73..a6e5abbb92 100644 --- a/reference/list/list/cend.md +++ b/reference/list/list/cend.md @@ -6,7 +6,8 @@ * cpp11[meta cpp] ```cpp -const_iterator cend() const noexcept; +const_iterator cend() const noexcept; // (1) C++11 +constexpr const_iterator cend() const noexcept; // (1) C++26 ``` ## 概要 @@ -63,3 +64,4 @@ int main() ## 参照 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/list/list/clear.md b/reference/list/list/clear.md index fadce81906..e22b3d5624 100644 --- a/reference/list/list/clear.md +++ b/reference/list/list/clear.md @@ -5,8 +5,9 @@ * function[meta id-type] ```cpp -void clear(); // C++03 -void clear() noexcept; // C++11 +void clear(); // (1) C++03 +void clear() noexcept; // (1) C++11 +constexpr void clear() noexcept; // (1) C++26 ``` ## 概要 @@ -70,3 +71,4 @@ int main() ## 参照 - [LWG Issue 2231. DR 704 removes complexity guarantee for `clear()`](http://www.open-std.org/jtc1/sc22/wg21/docs/lwg-defects.html#2231) - C++03までこの関数の効果は`erase(begin(), end())`だったため、それによって線形時間の計算量が保証されていたが、C++11で効果の表記が変わったために、保証がなくなってしまっていた。C++14であらためて保証を追加。 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/list/list/crbegin.md b/reference/list/list/crbegin.md index 3f3e0a9564..984d4528e5 100644 --- a/reference/list/list/crbegin.md +++ b/reference/list/list/crbegin.md @@ -6,7 +6,8 @@ * cpp11[meta cpp] ```cpp -const_reverse_iterator crbegin() const noexcept; +const_reverse_iterator crbegin() const noexcept; // (1) C++11 +constexpr const_reverse_iterator crbegin() const noexcept; // (1) C++26 ``` ## 概要 @@ -59,3 +60,4 @@ int main() ## 参照 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/list/list/crend.md b/reference/list/list/crend.md index 9457da5aa4..43f8b887ce 100644 --- a/reference/list/list/crend.md +++ b/reference/list/list/crend.md @@ -6,7 +6,8 @@ * cpp11[meta cpp] ```cpp -const_reverse_iterator crend() const noexcept; +const_reverse_iterator crend() const noexcept; // (1) C++11 +constexpr const_reverse_iterator crend() const noexcept; // (1) C++26 ``` ## 概要 @@ -59,3 +60,4 @@ int main() ## 参照 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/list/list/emplace.md b/reference/list/list/emplace.md index 9d7badbfc2..4d8475d6dd 100644 --- a/reference/list/list/emplace.md +++ b/reference/list/list/emplace.md @@ -7,7 +7,13 @@ ```cpp template -iterator emplace(const_iterator position, Args&&... args); +iterator + emplace(const_iterator position, + Args&&... args); // (1) C++11 +template +constexpr iterator + emplace(const_iterator position, + Args&&... args); // (1) C++26 ``` ## 概要 @@ -76,3 +82,4 @@ int main() ## 参照 - [N2345 Placement Insert for Containers (Revision 2)](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2345.pdf) +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/list/list/emplace_back.md b/reference/list/list/emplace_back.md index 1ffa5206b0..10c3d77f90 100644 --- a/reference/list/list/emplace_back.md +++ b/reference/list/list/emplace_back.md @@ -7,10 +7,11 @@ ```cpp template -void emplace_back(Args&&... args); // C++14 まで - +void emplace_back(Args&&... args); // (1) C++11 +template +reference emplace_back(Args&&... args); // (1) C++17 template -reference emplace_back(Args&&... args); // C++17 から +constexpr reference emplace_back(Args&&... args); // (1) C++26 ``` ## 概要 @@ -92,3 +93,4 @@ int main() - [P0084R0 Emplace Return Type](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2015/p0084r0.pdf) - [P0084R1 Emplace Return Type (Revision 1)](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/p0084r1.pdf) - [P0084R2 Emplace Return Type (Revision 2)](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/p0084r2.pdf) +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/list/list/emplace_front.md b/reference/list/list/emplace_front.md index 599ee0e5ea..a64ff49ddc 100644 --- a/reference/list/list/emplace_front.md +++ b/reference/list/list/emplace_front.md @@ -7,10 +7,11 @@ ```cpp template -void emplace_front(Args&&... args); // C++14 まで - +void emplace_front(Args&&... args); // (1) C++11 +template +reference emplace_front(Args&&... args); // (1) C++17 template -reference emplace_front(Args&&... args); // C++17 から +constexpr reference emplace_front(Args&&... args); // (1) C++26 ``` ## 概要 @@ -92,3 +93,4 @@ int main() - [P0084R0 Emplace Return Type](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2015/p0084r0.pdf) - [P0084R1 Emplace Return Type (Revision 1)](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/p0084r1.pdf) - [P0084R2 Emplace Return Type (Revision 2)](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/p0084r2.pdf) +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/list/list/empty.md b/reference/list/list/empty.md index bb873c82d9..ee888bf304 100644 --- a/reference/list/list/empty.md +++ b/reference/list/list/empty.md @@ -5,10 +5,10 @@ * function[meta id-type] ```cpp -bool empty() const; // C++03 -bool empty() const noexcept; // C++11 -[[nodiscard]] bool empty() const noexcept; // C++20 -bool empty() const noexcept; // C++26 +bool empty() const; // (1) C++03 +bool empty() const noexcept; // (1) C++11 +[[nodiscard]] bool empty() const noexcept; // (1) C++20 +constexpr bool empty() const noexcept; // (1) C++26 ``` ## 概要 @@ -61,3 +61,4 @@ false - C++20で`[[nodiscard]]`が付加された - [P2422R1 Remove `nodiscard` annotations from the standard library specification](https://open-std.org/jtc1/sc22/wg21/docs/papers/2024/p2422r1.html) - C++26で`[[nodiscard]]`指定が削除された +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/list/list/end.md b/reference/list/list/end.md index 6584b208d1..ffb098f0a1 100644 --- a/reference/list/list/end.md +++ b/reference/list/list/end.md @@ -5,10 +5,13 @@ * function[meta id-type] ```cpp -iterator end(); // (1) C++03 -iterator end() noexcept; // (1) C++11 -const_iterator end() const; // (2) C++03 -const_iterator end() const noexcept; // (2) C++11 +iterator end(); // (1) C++03 +iterator end() noexcept; // (1) C++11 +constexpr iterator end() noexcept; // (1) C++26 + +const_iterator end() const; // (2) C++03 +const_iterator end() const noexcept; // (2) C++11 +constexpr const_iterator end() const noexcept; // (2) C++26 ``` ## 概要 @@ -66,3 +69,4 @@ int main() ``` ## 参照 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/list/list/erase.md b/reference/list/list/erase.md index 3520bf169d..445db738c8 100644 --- a/reference/list/list/erase.md +++ b/reference/list/list/erase.md @@ -5,12 +5,19 @@ * function[meta id-type] ```cpp -iterator erase(iterator position); // (1) C++03 -iterator erase(const_iterator position); // (1) C++11 -iterator erase(iterator position, - iterator last); // (2) C++03 -iterator erase(const_iterator position, - const_iterator last); // (2) C++11 +iterator erase(iterator position); // (1) C++03 +iterator erase(const_iterator position); // (1) C++11 +constexpr iterator erase(const_iterator position); // (1) C++26 + +iterator + erase(iterator position, + iterator last); // (2) C++03 +iterator + erase(const_iterator position, + const_iterator last); // (2) C++11 +constexpr iterator + erase(const_iterator position, + const_iterator last); // (2) C++26 ``` ## 概要 @@ -117,3 +124,4 @@ int main() ## 参照 - [N2350 Container insert/erase and iterator constness (Revision 1)](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2350.pdf) +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/list/list/erase_free.md b/reference/list/list/erase_free.md index 0eb2535cfb..93a62cf61c 100644 --- a/reference/list/list/erase_free.md +++ b/reference/list/list/erase_free.md @@ -10,7 +10,7 @@ namespace std { typename list::size_type erase(list& c, const U& value); // (1) C++20 template - typename list::size_type + constexpr typename list::size_type erase(list& c, const U& value); // (1) C++26 } ``` @@ -110,3 +110,4 @@ int main() { - [R1115R3 Improving the Return Value of Erase-Like Algorithms II: Free `erase`/`erase_if`](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2019/p1115r3.pdf) - [P2248R8 Enabling list-initialization for algorithms](https://open-std.org/jtc1/sc22/wg21/docs/papers/2024/p2248r8.html) - C++26で波カッコ初期化 (リスト初期化) に対応した +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/list/list/erase_if_free.md b/reference/list/list/erase_if_free.md index 1ffc7304bc..ada23ba00e 100644 --- a/reference/list/list/erase_if_free.md +++ b/reference/list/list/erase_if_free.md @@ -7,7 +7,13 @@ ```cpp namespace std { template - typename list::size_type erase_if(list& c, Predicate pred); + typename list::size_type + erase_if(list& c, + Predicate pred); // (1) C++20 + template + constexpr typename list::size_type + erase_if(list& c, + Predicate pred); // (1) C++26 } ``` @@ -67,3 +73,4 @@ int main() ## 参照 - [P1209R0 Adopt consistent container erasure from Library Fundamentals 2](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2018/p1209r0.html) - [R1115R3 Improving the Return Value of Erase-Like Algorithms II: Free `erase`/`erase_if`](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2019/p1115r3.pdf) +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/list/list/front.md b/reference/list/list/front.md index 0fd9826dea..3963c09036 100644 --- a/reference/list/list/front.md +++ b/reference/list/list/front.md @@ -5,8 +5,11 @@ * function[meta id-type] ```cpp -reference front(); // (1) -const_reference front() const; // (2) +reference front(); // (1) C++03 +constexpr reference front(); // (1) C++26 + +const_reference front() const; // (2) C++03 +constexpr const_reference front() const; // (2) C++26 ``` ## 概要 @@ -41,3 +44,7 @@ int main() ``` 3 ``` + + +## 参照 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/list/list/get_allocator.md b/reference/list/list/get_allocator.md index 3806188bf0..e935f27616 100644 --- a/reference/list/list/get_allocator.md +++ b/reference/list/list/get_allocator.md @@ -5,8 +5,9 @@ * function[meta id-type] ```cpp -allocator_type get_allocator() const; // C++03 -allocator_type get_allocator() const noexcept; // C++11 +allocator_type get_allocator() const; // (1) C++03 +allocator_type get_allocator() const noexcept; // (1) C++11 +constexpr allocator_type get_allocator() const noexcept; // (1) C++26 ``` ## 概要 @@ -55,3 +56,7 @@ int main() - [Visual C++](/implementation.md#visual_cpp): 2002 [mark verified], 2003 [mark verified], 2005 [mark verified], 2008 [mark verified], 2010 [mark verified], 2012 [mark verified], 2013 [mark verified], 2015 [mark verified], 2017 [mark verified] - 2012, 2013は、`noexcept`が実装されていないため、`throw()`が修飾されている。 - 2015からは、`noexcept`が修飾されている。 + + +## 参照 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/list/list/insert.md b/reference/list/list/insert.md index 8c368f7d1a..68f9647c58 100644 --- a/reference/list/list/insert.md +++ b/reference/list/list/insert.md @@ -5,27 +5,58 @@ * function[meta id-type] ```cpp -// C++03 -iterator insert(iterator position, const T& x); // (1) C++03 -iterator insert(const_iterator position, const T& x); // (1) C++11 -iterator insert(const_iterator position, T&& x); // (2) C++11 - -void insert(iterator position, - size_type n, const T& x); // (3) C++03 -iterator insert(const_iterator position, - size_type n, const T& x); // (3) C++11 +iterator + insert(iterator position, + const T& x); // (1) C++03 +iterator + insert(const_iterator position, + const T& x); // (1) C++11 +constexpr iterator + insert(const_iterator position, + const T& x); // (1) C++26 + +iterator + insert(const_iterator position, + T&& x); // (2) C++11 +constexpr iterator + insert(const_iterator position, + T&& x); // (2) C++26 + +void + insert(iterator position, + size_type n, + const T& x); // (3) C++03 +iterator + insert(const_iterator position, + size_type n, + const T& x); // (3) C++11 +constexpr iterator + insert(const_iterator position, + size_type n, + const T& x); // (3) C++26 template -void insert(iterator position, - InputIterator first, - InputIterator last); // (4) C++03 +void + insert(iterator position, + InputIterator first, + InputIterator last); // (4) C++03 template -iterator insert(const_iterator position, - InputIterator first, - InputIterator last); // (4) C++11 - -iterator insert(const_iterator position, - initializer_list il); // (5) C++11 +iterator + insert(const_iterator position, + InputIterator first, + InputIterator last); // (4) C++11 +template +constexpr iterator + insert(const_iterator position, + InputIterator first, + InputIterator last); // (4) C++26 + +iterator + insert(const_iterator position, + initializer_list il); // (5) C++11 +constexpr iterator + insert(const_iterator position, + initializer_list il); // (5) C++26 ``` * initializer_list[link /reference/initializer_list/initializer_list.md] @@ -135,3 +166,4 @@ insert initializer_list : 1 2 3 4 5 6 - [N2350 Container insert/erase and iterator constness (Revision 1)](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2350.pdf) - [N2679 Initializer Lists for Standard Containers(Revision 1)](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2679.pdf) - (5)の経緯となる提案文書 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/list/list/insert_range.md b/reference/list/list/insert_range.md index 9e8f272a6e..12b3db00bf 100644 --- a/reference/list/list/insert_range.md +++ b/reference/list/list/insert_range.md @@ -7,7 +7,9 @@ ```cpp template R> -iterator insert_range(const_iterator pos, R&& rg); // C++23 +iterator insert_range(const_iterator pos, R&& rg); // (1) C++23 +template R> +constexpr iterator insert_range(const_iterator pos, R&& rg); // (1) C++26 ``` ## 概要 @@ -60,3 +62,7 @@ int main() |-------------------------------------------|----------------------| | [`insert`](insert.md) | 任意の位置に要素を挿入する | | [`emplace`](emplace.md) | 任意の位置に要素を直接構築で挿入する | + + +## 参照 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/list/list/max_size.md b/reference/list/list/max_size.md index 5672a5333e..a9d4de2392 100644 --- a/reference/list/list/max_size.md +++ b/reference/list/list/max_size.md @@ -5,8 +5,9 @@ * function[meta id-type] ```cpp -size_type max_size() const; // C++03 -size_type max_size() const noexcept; // C++11 +size_type max_size() const; // (1) C++03 +size_type max_size() const noexcept; // (1) C++11 +constexpr size_type max_size() const noexcept; // (1) C++26 ``` ## 概要 @@ -45,3 +46,7 @@ int main() ``` 768614336404564650 ``` + + +## 参照 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/list/list/merge.md b/reference/list/list/merge.md index 3073b835bb..be40615109 100644 --- a/reference/list/list/merge.md +++ b/reference/list/list/merge.md @@ -5,10 +5,25 @@ * function[meta id-type] ```cpp -void merge(list& x); // (1) -void merge(list&& x); // (2) C++11 -template void merge(list& x, Compare comp); // (3) -template void merge(list&& x, Compare comp); // (4) C++11 +void merge(list& x); // (1) C++03 +constexpr void merge(list& x); // (1) C++26 + +void merge(list&& x); // (2) C++11 +constexpr void merge(list&& x); // (2) C++26 + +template +void + merge(list& x, Compare comp); // (3) C++03 +template +constexpr void + merge(list& x, Compare comp); // (3) C++26 + +template +void + merge(list&& x, Compare comp); // (4) C++11 +template +constexpr void + merge(list&& x, Compare comp); // (4) C++26 ``` ## 概要 @@ -70,3 +85,7 @@ int main() 5 6 ``` + + +## 参照 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/list/list/op_assign.md b/reference/list/list/op_assign.md index 99e2009c1e..734501fd5f 100644 --- a/reference/list/list/op_assign.md +++ b/reference/list/list/op_assign.md @@ -5,11 +5,17 @@ * function[meta id-type] ```cpp -list& operator=(const list& x); // (1) -list& operator=(list&& x); // (2) C++11 +list& operator=(const list& x); // (1) C++03 +constexpr list& operator=(const list& x); // (1) C++26 + +list& operator=(list&& x); // (2) C++11 list& operator=(list&& x) noexcept(allocator_traits::is_always_equal::value); // (2) C++17 -list& operator=(initializer_list x); // (3) C++11 +constexpr list& operator=(list&& x) + noexcept(allocator_traits::is_always_equal::value); // (2) C++26 + +list& operator=(initializer_list x); // (3) C++11 +constexpr list& operator=(initializer_list x); // (3) C++26 ``` * initializer_list[link /reference/initializer_list/initializer_list.md] @@ -91,3 +97,4 @@ int main () - (3)の経緯となる提案文書 - [N4258 Cleaning-up noexcept in the Library, Rev 3](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n4258.pdf) - `noexcept` 追加の経緯となる提案文書 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/list/list/op_compare_3way.md b/reference/list/list/op_compare_3way.md index eb0d6c7cb8..6bbacd30c3 100644 --- a/reference/list/list/op_compare_3way.md +++ b/reference/list/list/op_compare_3way.md @@ -10,6 +10,10 @@ namespace std { synth-three-way-result operator<=>(const list& x, const list& y); // (1) C++20 + template + constexpr synth-three-way-result + operator<=>(const list& x, + const list& y); // (1) C++26 } ``` @@ -72,3 +76,4 @@ int main () ## 参照 - [P1614R2 The Mothership has Landed](https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2019/p1614r2.html) - C++20での三方比較演算子の追加と、関連する演算子の自動導出 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/list/list/op_constructor.md b/reference/list/list/op_constructor.md index 1190ba23e2..3ccf45d334 100644 --- a/reference/list/list/op_constructor.md +++ b/reference/list/list/op_constructor.md @@ -5,38 +5,76 @@ * function[meta id-type] ```cpp -list(); // (1) C++14 から -list(const Allocator& a); // (2) C++14 から +list(); // (1) C++14 +constexpr list(); // (1) C++26 + +list(const Allocator& a); // (2) C++14 +constexpr list(const Allocator& a); // (2) C++26 + explicit list(const Allocator& a = Allocator()); // (1), (2) C++11 まで。C++14 で削除 explicit list(size_type n, const T& value = T(), - const Allocator& a = Allocator()); // (3) C++03 まで。C++11 で削除 + const Allocator& a = Allocator()); // (3) C++03 まで。C++11 で削除 list(size_type n, const T& value, const Allocator& a = Allocator()); // (3) C++11 から - -explicit list(size_type n); // (4) C++11。C++14 で削除 -explicit list(size_type n, - const Allocator& a = Allocator()); // (4) C++14 から +constexpr + list(size_type n, const T& value, + const Allocator& a = Allocator()); // (3) C++26 + +explicit + list(size_type n); // (4) C++11。C++14 で削除 +explicit + list(size_type n, + const Allocator& a = Allocator()); // (4) C++14 から +constexpr explicit + list(size_type n, + const Allocator& a = Allocator()); // (4) C++26 template -list(InputIterator first, InputIterator last, - const Allocator& a = Allocator()); // (5) +list(InputIterator first, + InputIterator last, + const Allocator& a = Allocator()); // (5) C++03 +template +constexpr + list(InputIterator first, + InputIterator last, + const Allocator& a = Allocator()); // (5) C++26 -list(const list& x); // (6) -list(list&& x); // (7) C++11 から -list(const list& x, const Allocator& a); // (8) C++11 -list(const list& x, - const type_identity_t& a); // (8) C++23 +list(const list& x); // (6) C++03 +constexpr list(const list& x); // (6) C++26 -list(list&& x, const Allocator& a); // (9) C++11 -list(list&& x, const type_identity_t& a); // (9) C++23 +list(list&& x); // (7) C++11 +constexpr list(list&& x); // (7) C++26 + +list(const list& x, + const Allocator& a); // (8) C++11 +list(const list& x, + const type_identity_t& a); // (8) C++23 +constexpr + list(const list& x, + const type_identity_t& a); // (8) C++26 + +list(list&& x, + const Allocator& a); // (9) C++11 +list(list&& x, + const type_identity_t& a); // (9) C++23 +constexpr + list(list&& x, + const type_identity_t& a); // (9) C++26 list(initializer_list il, - const Allocator& a = Allocator()); // (10) C++11 から + const Allocator& a = Allocator()); // (10) C++11 +constexpr + list(initializer_list il, + const Allocator& a = Allocator()); // (10) C++26 template R> list(from_range_t, R&& rg, - const Allocator& a = Allocator()); // (11) C++23 から + const Allocator& a = Allocator()); // (11) C++23 +template R> +constexpr + list(from_range_t, R&& rg, + const Allocator& a = Allocator()); // (11) C++26 ``` * type_identity_t[link /reference/type_traits/type_identity.md] * initializer_list[link /reference/initializer_list/initializer_list.md] @@ -183,3 +221,4 @@ ls7 : 1 2 3 なお、Discussion の例はアロケータの型が誤っているので注意 - [P1518R2 Stop Overconstraining Allocators in Container Deduction Guides](https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2021/p1518r2.html) - C++23でのアロケータ引数を`type_identity_t`で包む変更 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/list/list/op_destructor.md b/reference/list/list/op_destructor.md index 432863960f..5ffc43b481 100644 --- a/reference/list/list/op_destructor.md +++ b/reference/list/list/op_destructor.md @@ -5,7 +5,8 @@ * function[meta id-type] ```cpp -~list(); +~list(); // (1) C++03 +constexpr ~list(); // (1) C++26 ``` ## 概要 @@ -21,3 +22,4 @@ ## 参照 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/list/list/op_equal.md b/reference/list/list/op_equal.md index 5da792d087..bef3a9ec40 100644 --- a/reference/list/list/op_equal.md +++ b/reference/list/list/op_equal.md @@ -6,7 +6,9 @@ ```cpp namespace std { template - bool operator==(const list& x, const list& y); + bool operator==(const list& x, const list& y); // (1) C++03 + template + constexpr bool operator==(const list& x, const list& y); // (1) C++26 } ``` @@ -70,3 +72,4 @@ false - C++14から、2つ目のイテレータ範囲のendイテレータをとる`equal()`アルゴリズムを使用するようになった。 - [P1614R2 The Mothership has Landed](https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2019/p1614r2.html) - C++20での三方比較演算子の追加と、関連する演算子の自動導出 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/list/list/op_greater.md b/reference/list/list/op_greater.md index bdb18a43a3..1a9b76931a 100644 --- a/reference/list/list/op_greater.md +++ b/reference/list/list/op_greater.md @@ -9,6 +9,9 @@ namespace std { template bool operator>(const list& x, const list& y); // (1) C++03 + template + constexpr bool operator>(const list& x, + const list& y); // (1) C++26 } ``` @@ -50,3 +53,4 @@ true ## 参照 - [P1614R2 The Mothership has Landed](https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2019/p1614r2.html) - C++20での三方比較演算子の追加と、関連する演算子の自動導出 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/list/list/op_greater_equal.md b/reference/list/list/op_greater_equal.md index 9484428b97..f099e303fa 100644 --- a/reference/list/list/op_greater_equal.md +++ b/reference/list/list/op_greater_equal.md @@ -9,6 +9,9 @@ namespace std { template bool operator>=(const list& x, const list& y); // (1) C++03 + template + constexpr bool operator>=(const list& x, + const list& y); // (1) C++26 } ``` @@ -50,3 +53,4 @@ true ## 参照 - [P1614R2 The Mothership has Landed](https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2019/p1614r2.html) - C++20での三方比較演算子の追加と、関連する演算子の自動導出 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/list/list/op_less.md b/reference/list/list/op_less.md index 370cb2a386..12b085afeb 100644 --- a/reference/list/list/op_less.md +++ b/reference/list/list/op_less.md @@ -9,6 +9,9 @@ namespace std { template bool operator<(const list& x, const list& y); // (1) C++03 + template + constexpr bool operator<(const list& x, + const list& y); // (1) C++26 } ``` @@ -60,3 +63,4 @@ true ## 参照 - [P1614R2 The Mothership has Landed](https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2019/p1614r2.html) - C++20での三方比較演算子の追加と、関連する演算子の自動導出 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/list/list/op_less_equal.md b/reference/list/list/op_less_equal.md index 0a723e13fb..739271ddd9 100644 --- a/reference/list/list/op_less_equal.md +++ b/reference/list/list/op_less_equal.md @@ -9,6 +9,9 @@ namespace std { template bool operator<=(const list& x, const list& y); // (1) C++03 + template + constexpr bool operator<=(const list& x, + const list& y); // (1) C++26 } ``` @@ -49,3 +52,4 @@ true ## 参照 - [P1614R2 The Mothership has Landed](https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2019/p1614r2.html) - C++20での三方比較演算子の追加と、関連する演算子の自動導出 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/list/list/op_not_equal.md b/reference/list/list/op_not_equal.md index 42390ed4d1..9333a0d850 100644 --- a/reference/list/list/op_not_equal.md +++ b/reference/list/list/op_not_equal.md @@ -9,6 +9,9 @@ namespace std { template bool operator!=(const list& x, const list& y); // (1) C++03 + template + constexpr bool operator!=(const list& x, + const list& y); // (1) C++26 } ``` @@ -59,3 +62,4 @@ true ## 参照 - [P1614R2 The Mothership has Landed](https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2019/p1614r2.html) - C++20での三方比較演算子の追加と、関連する演算子の自動導出 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/list/list/pop_back.md b/reference/list/list/pop_back.md index e94b8172b8..85fe2215cf 100644 --- a/reference/list/list/pop_back.md +++ b/reference/list/list/pop_back.md @@ -5,7 +5,8 @@ * function[meta id-type] ```cpp -void pop_back(); +void pop_back(); // (1) C++03 +constexpr void pop_back(); // (1) C++26 ``` ## 概要 @@ -47,3 +48,7 @@ int main() 1 2 ``` + + +## 参照 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/list/list/pop_front.md b/reference/list/list/pop_front.md index 3c3e1649b4..482ac1497e 100644 --- a/reference/list/list/pop_front.md +++ b/reference/list/list/pop_front.md @@ -5,7 +5,8 @@ * function[meta id-type] ```cpp -void pop_front(); +void pop_front(); // (1) C++03 +constexpr void pop_front(); // (1) C++26 ``` ## 概要 @@ -47,3 +48,7 @@ int main() 2 3 ``` + + +## 参照 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/list/list/prepend_range.md b/reference/list/list/prepend_range.md index 6dca97b946..76b7a15235 100644 --- a/reference/list/list/prepend_range.md +++ b/reference/list/list/prepend_range.md @@ -7,7 +7,9 @@ ```cpp template R> -void prepend_range(R&& rg); // C++23 +void prepend_range(R&& rg); // (1) C++23 +template R> +constexpr void prepend_range(R&& rg); // (1) C++26 ``` ## 概要 @@ -63,3 +65,7 @@ int main() |-------------------------------------------|----------------------| | [`push_front`](push_front.md) | 先頭に要素を追加する | | [`emplace_front`](emplace_front.md) | 先頭に要素を直接構築で追加する | + + +## 参照 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/list/list/push_back.md b/reference/list/list/push_back.md index 5578aa071d..cee39f98e8 100644 --- a/reference/list/list/push_back.md +++ b/reference/list/list/push_back.md @@ -5,8 +5,11 @@ * function[meta id-type] ```cpp -void push_back(const T& x); // (1) -void push_back(T&& x); // (2) C++11 +void push_back(const T& x); // (1) C++03 +constexpr void push_back(const T& x); // (1) C++26 + +void push_back(T&& x); // (2) C++11 +constexpr void push_back(T&& x); // (2) C++26 ``` ## 概要 @@ -100,3 +103,7 @@ int main() 1 0 ``` + + +## 参照 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/list/list/push_front.md b/reference/list/list/push_front.md index 19fdf683af..4db1b436b0 100644 --- a/reference/list/list/push_front.md +++ b/reference/list/list/push_front.md @@ -5,8 +5,11 @@ * function[meta id-type] ```cpp -void push_front(const T& x); // (1) -void push_front(T&& x); // (2) C++11 +void push_front(const T& x); // (1) C++03 +constexpr void push_front(const T& x); // (1) C++26 + +void push_front(T&& x); // (2) C++11 +constexpr void push_front(T&& x); // (2) C++26 ``` ## 概要 @@ -51,3 +54,7 @@ int main() hello world ``` + + +## 参照 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/list/list/rbegin.md b/reference/list/list/rbegin.md index ff23d05ce7..1b1ec5d0e3 100644 --- a/reference/list/list/rbegin.md +++ b/reference/list/list/rbegin.md @@ -5,10 +5,13 @@ * function[meta id-type] ```cpp -reverse_iterator rbegin(); // (1) C++03 -reverse_iterator rbegin() noexcept; // (1) C++11 -const_reverse_iterator rbegin() const; // (2) C++03 -const_reverse_iterator rbegin() const noexcept; // (2) C++11 +reverse_iterator rbegin(); // (1) C++03 +reverse_iterator rbegin() noexcept; // (1) C++11 +constexpr reverse_iterator rbegin() noexcept; // (1) C++26 + +const_reverse_iterator rbegin() const; // (2) C++03 +const_reverse_iterator rbegin() const noexcept; // (2) C++11 +constexpr const_reverse_iterator rbegin() const noexcept; // (2) C++26 ``` ## 概要 @@ -49,3 +52,4 @@ int main() ``` ## 参照 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/list/list/remove.md b/reference/list/list/remove.md index 2d2a70a5c1..93714d695e 100644 --- a/reference/list/list/remove.md +++ b/reference/list/list/remove.md @@ -5,8 +5,9 @@ * function[meta id-type] ```cpp -void remove(const T& value); // (1) C++03 -size_type remove(const T& value); // (1) C++20 +void remove(const T& value); // (1) C++03 +size_type remove(const T& value); // (1) C++20 +constexpr size_type remove(const T& value); // (1) C++26 ``` ## 概要 @@ -58,3 +59,4 @@ int main() ## 参照 - [P0646R1 Improving the Return Value of Erase-Like Algorithms I: list/forward list](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2018/p0646r1.pdf) +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/list/list/remove_if.md b/reference/list/list/remove_if.md index 12ce40889b..3ac6558db3 100644 --- a/reference/list/list/remove_if.md +++ b/reference/list/list/remove_if.md @@ -6,10 +6,11 @@ ```cpp template -void remove_if(Predicate pred); // (1) C++03 - +void remove_if(Predicate pred); // (1) C++03 +template +size_type remove_if(Predicate pred); // (1) C++20 template -size_type remove_if(Predicate pred); // (1) C++20 +constexpr size_type remove_if(Predicate pred); // (1) C++26 ``` ## 概要 @@ -61,3 +62,4 @@ int main() ## 参照 - [P0646R1 Improving the Return Value of Erase-Like Algorithms I: list/forward list](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2018/p0646r1.pdf) +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/list/list/rend.md b/reference/list/list/rend.md index ffe6034f6f..977ddf7be6 100644 --- a/reference/list/list/rend.md +++ b/reference/list/list/rend.md @@ -5,10 +5,13 @@ * function[meta id-type] ```cpp -reverse_iterator rend(); // (1) C++03 -reverse_iterator rend() noexcept; // (1) C++11 -const_reverse_iterator rend() const; // (2) C++03 -const_reverse_iterator rend() const noexcept; // (2) C++11 +reverse_iterator rend(); // (1) C++03 +reverse_iterator rend() noexcept; // (1) C++11 +constexpr reverse_iterator rend() noexcept; // (1) C++26 + +const_reverse_iterator rend() const; // (2) C++03 +const_reverse_iterator rend() const noexcept; // (2) C++11 +constexpr const_reverse_iterator rend() const noexcept; // (2) C++26 ``` ## 概要 @@ -62,3 +65,4 @@ int main() ``` ## 参照 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/list/list/resize.md b/reference/list/list/resize.md index 8538e152da..86ba5f2706 100644 --- a/reference/list/list/resize.md +++ b/reference/list/list/resize.md @@ -5,9 +5,13 @@ * function[meta id-type] ```cpp -void resize(size_type sz); // (1) C++11 -void resize(size_type sz, const value_type& c); // (2) C++11 -void resize(size_type sz, T c = T()); // (1), (2) C++03。C++11で削除 +void resize(size_type sz); // (1) C++11 +constexpr void resize(size_type sz); // (1) C++26 + +void resize(size_type sz, const value_type& c); // (2) C++11 +constexpr void resize(size_type sz, const value_type& c); // (2) C++26 + +void resize(size_type sz, T c = T()); // (1) + (2) C++03。C++11で削除 ``` ## 概要 @@ -67,3 +71,7 @@ int main() 3 ``` + + +## 参照 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/list/list/reverse.md b/reference/list/list/reverse.md index 8c00565488..e11def9f7c 100644 --- a/reference/list/list/reverse.md +++ b/reference/list/list/reverse.md @@ -5,8 +5,9 @@ * function[meta id-type] ```cpp -void reverse(); // C++03 -void reverse() noexcept; // C++11 +void reverse(); // (1) C++03 +void reverse() noexcept; // (1) C++11 +constexpr void reverse() noexcept; // (1) C++26 ``` ## 概要 @@ -53,3 +54,7 @@ int main() 2 1 ``` + + +## 参照 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/list/list/size.md b/reference/list/list/size.md index e06b7f5df8..b09739d55f 100644 --- a/reference/list/list/size.md +++ b/reference/list/list/size.md @@ -5,8 +5,9 @@ * function[meta id-type] ```cpp -size_type size() const; // C++03 -size_type size() const noexcept; // C++11 +size_type size() const; // (1) C++03 +size_type size() const noexcept; // (1) C++11 +constexpr size_type size() const noexcept; // (1) C++26 ``` ## 概要 @@ -52,3 +53,4 @@ int main() ## 参照 - [N2909 Specifying the complexity of `size()`](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2009/n2909.pdf) - [C++0x 標準コンテナのsize()の計算量を規定 - Faith and Brave - C++で遊ぼう](http://d.hatena.ne.jp/faith_and_brave/20090902/1251879571) +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/list/list/sort.md b/reference/list/list/sort.md index 5ed9f562fc..e1f97b98a4 100644 --- a/reference/list/list/sort.md +++ b/reference/list/list/sort.md @@ -5,10 +5,13 @@ * function[meta id-type] ```cpp -void sort(); // (1) +void sort(); // (1) C++03 +constexpr void sort(); // (1) C++26 template -void sort(Compare comp); // (2) +void sort(Compare comp); // (2) C++03 +template +constexpr void sort(Compare comp); // (2) C++26 ``` ## 概要 @@ -58,3 +61,7 @@ int main() 2 3 ``` + + +## 参照 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/list/list/splice.md b/reference/list/list/splice.md index 1ef73e11bc..f6ba6dd54a 100644 --- a/reference/list/list/splice.md +++ b/reference/list/list/splice.md @@ -5,26 +5,61 @@ * function[meta id-type] ```cpp -void splice(iterator position, list& x); // (1) C++03 -void splice(const_iterator position, list& x); // (1) C++11 - -void splice(const_iterator position, list&& x); // (2) C++11 - -void splice(iterator position, list& x, - iterator i); // (3) C++03 -void splice(const_iterator position, list& x, - const_iterator i); // (3) C++11 - -void splice(const_iterator position, list&& x, - const_iterator i); // (4) C++11 - -void splice(iterator position, list& x, - iterator first, iterator last); // (5) C++03 -void splice(const_iterator position, list& x, - const_iterator first, const_iterator last); // (5) C++11 - -void splice(const_iterator position, list&& x, - const_iterator first, const_iterator last); // (6) C++11 +void splice(iterator position, list& x); // (1) C++03 +void splice(const_iterator position, list& x); // (1) C++11 +constexpr void splice(const_iterator position, list& x); // (1) C++26 + +void splice(const_iterator position, list&& x); // (2) C++11 +constexpr void splice(const_iterator position, list&& x); // (2) C++26 + +void + splice(iterator position, + list& x, + iterator i); // (3) C++03 +void + splice(const_iterator + position, list& x, + const_iterator i); // (3) C++11 +constexpr void + splice(const_iterator position, + list& x, + const_iterator i); // (3) C++26 + +void + splice(const_iterator position, + list&& x, + const_iterator i); // (4) C++11 +constexpr void + splice(const_iterator position, + list&& x, + const_iterator i); // (4) C++26 + +void + splice(iterator position, + list& x, + iterator first, + iterator last); // (5) C++03 +void + splice(const_iterator position, + list& x, + const_iterator first, + const_iterator last); // (5) C++11 +constexpr void + splice(const_iterator position, + list& x, + const_iterator first, + const_iterator last); // (5) C++26 + +void + splice(const_iterator position, + list&& x, + const_iterator first, + const_iterator last); // (6) C++11 +constexpr void + splice(const_iterator position, + list&& x, + const_iterator first, + const_iterator last); // (6) C++26 ``` ## 概要 @@ -139,3 +174,4 @@ int main() - [N2350 Container insert/erase and iterator constness (Revision 1)](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2350.pdf) - [LWG Issue 3017. `list` `splice` functions should use `addressof`](https://wg21.cmeerw.net/lwg/issue3017) - [LWG Issue 3087. One final `&x` in §[list.ops]](https://wg21.cmeerw.net/lwg/issue3087) +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/list/list/swap.md b/reference/list/list/swap.md index ef388d3b7b..a034467fad 100644 --- a/reference/list/list/swap.md +++ b/reference/list/list/swap.md @@ -5,8 +5,14 @@ * function[meta id-type] ```cpp -void swap(list& x); -void swap(list& x) noexcept(allocator_traits::is_always_equal::value); // C++17 +void + swap(list& x); // (1) C++03 +void + swap(list& x) + noexcept(allocator_traits::is_always_equal::value); // (1) C++17 +constexpr void + swap(list& x) + noexcept(allocator_traits::is_always_equal::value); // (1) C++26 ``` ## 概要 @@ -64,3 +70,4 @@ int main() ## 参照 - [N4258 Cleaning-up noexcept in the Library, Rev 3](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n4258.pdf) - `noexcept` 追加の経緯となる提案文書 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/list/list/swap_free.md b/reference/list/list/swap_free.md index 820ec6d5b5..dde7b68d05 100644 --- a/reference/list/list/swap_free.md +++ b/reference/list/list/swap_free.md @@ -6,11 +6,19 @@ ```cpp namespace std { template - void swap(list& x, list& y); - + void + swap(list& x, + list& y); // (1) C++03 + template + void + swap(list& x, + list& y) + noexcept(noexcept(x.swap(y))); // (1) C++17 template - void swap(list& x, list& y) - noexcept(noexcept(x.swap(y))); // C++17 + constexpr void + swap(list& x, + list& y) + noexcept(noexcept(x.swap(y))); // (1) C++26 } ``` @@ -66,3 +74,4 @@ ls2 : {4 5 6 } ## 参照 - [N4258 Cleaning-up noexcept in the Library, Rev 3](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n4258.pdf) - `noexcept` 追加の経緯となる提案文書 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/list/list/unique.md b/reference/list/list/unique.md index 3384c7698f..83ad15a264 100644 --- a/reference/list/list/unique.md +++ b/reference/list/list/unique.md @@ -5,14 +5,16 @@ * function[meta id-type] ```cpp -void unique(); // (1) C++03 -size_type unique(); // (1) C++20 +void unique(); // (1) C++03 +size_type unique(); // (1) C++20 +constexpr size_type unique(); // (1) C++26 template -void unique(BinaryPredicate pred); // (2) C++03 - +void unique(BinaryPredicate pred); // (2) C++03 +template +size_type unique(BinaryPredicate pred); // (2) C++20 template -size_type unique(BinaryPredicate pred); // (2) C++20 +constexpr size_type unique(BinaryPredicate pred); // (2) C++26 ``` ## 概要 @@ -77,3 +79,4 @@ int main() ## 参照 - [P0646R1 Improving the Return Value of Erase-Like Algorithms I: list/forward list](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2018/p0646r1.pdf) +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/map/map/at.md b/reference/map/map/at.md index 981838d6f1..c1e5b3f60a 100644 --- a/reference/map/map/at.md +++ b/reference/map/map/at.md @@ -6,13 +6,17 @@ * cpp11[meta cpp] ```cpp -T& at(const key_type& x); // (1) C++11 -const T& at(const key_type& x) const; // (2) C++11 +T& at(const key_type& x); // (1) C++11 +constexpr T& at(const key_type& x); // (1) C++26 + +const T& at(const key_type& x) const; // (2) C++11 +constexpr const T& at(const key_type& x) const; // (2) C++26 template -T& at(const K& x); // (3) C++26 +constexpr T& at(const K& x); // (3) C++26 + template -const T& at(const K& x) const; // (4) C++26 +constexpr const T& at(const K& x) const; // (4) C++26 ``` ## 概要 @@ -106,3 +110,4 @@ exception std::out_of_range - [LWG Issue 464. Suggestion for new member functions in standard containers](http://www.open-std.org/jtc1/sc22/wg21/docs/lwg-defects.html#464) - [P2363R5 Extending associative containers with the remaining heterogeneous overloads](http://open-std.org/jtc1/sc22/wg21/docs/papers/2023/p2363r5.html) - C++26で`template `のバージョンが追加された +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/map/map/begin.md b/reference/map/map/begin.md index 773138d51f..e688d605b7 100644 --- a/reference/map/map/begin.md +++ b/reference/map/map/begin.md @@ -5,11 +5,13 @@ * function[meta id-type] ```cpp -iterator begin(); // (1) C++03 -iterator begin() noexcept; // (1) C++11 +iterator begin(); // (1) C++03 +iterator begin() noexcept; // (1) C++11 +constexpr iterator begin() noexcept; // (1) C++26 -const_iterator begin() const; // (2) C++03 -const_iterator begin() const noexcept; // (2) C++11 +const_iterator begin() const; // (2) C++03 +const_iterator begin() const noexcept; // (2) C++11 +constexpr const_iterator begin() const noexcept; // (2) C++26 ``` @@ -88,3 +90,7 @@ int main() | [`map::rend`](rend.md) | 先頭の前を指す逆イテレータを取得する | | [`map::crbegin`](crbegin.md) | 末尾を指す逆constイテレータを取得する | | [`map::crend`](crend.md) | 先頭の前を指す逆constイテレータを取得する | + + +## 参照 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/map/map/cbegin.md b/reference/map/map/cbegin.md index 95907a1948..86bde1b4e7 100644 --- a/reference/map/map/cbegin.md +++ b/reference/map/map/cbegin.md @@ -6,7 +6,8 @@ * cpp11[meta cpp] ```cpp -const_iterator cbegin() const noexcept; +const_iterator cbegin() const noexcept; // (1) C++11 +constexpr const_iterator cbegin() const noexcept; // (1) C++26 ``` @@ -81,3 +82,7 @@ int main() | [`map::rend`](rend.md) | 先頭の前を指す逆イテレータを取得する | | [`map::crbegin`](crbegin.md) | 末尾を指す逆constイテレータを取得する | | [`map::crend`](crend.md) | 先頭の前を指す逆constイテレータを取得する | + + +## 参照 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/map/map/cend.md b/reference/map/map/cend.md index 4b97a897c6..17db0d9632 100644 --- a/reference/map/map/cend.md +++ b/reference/map/map/cend.md @@ -6,7 +6,8 @@ * cpp11[meta cpp] ```cpp -const_iterator cend() const noexcept; +const_iterator cend() const noexcept; // (1) C++11 +constexpr const_iterator cend() const noexcept; // (1) C++26 ``` ## 概要 @@ -86,3 +87,7 @@ int main() | [`map::rend`](rend.md) | 先頭の前を指す逆イテレータを取得する | | [`map::crbegin`](crbegin.md) | 末尾を指す逆constイテレータを取得する | | [`map::crend`](crend.md) | 先頭の前を指す逆constイテレータを取得する | + + +## 参照 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/map/map/clear.md b/reference/map/map/clear.md index 4eb7dfbd77..98287e93cf 100644 --- a/reference/map/map/clear.md +++ b/reference/map/map/clear.md @@ -5,8 +5,9 @@ * function[meta id-type] ```cpp -void clear(); // C++03 -void clear() noexcept; // C++11 +void clear(); // (1) C++03 +void clear() noexcept; // (1) C++11 +constexpr void clear() noexcept; // (1) C++26 ``` ## 概要 @@ -68,3 +69,7 @@ int main() | [`map::erase`](erase.md) | 要素を削除する | | [`map::size`](size.md) | 要素数を取得する | | [`map::empty`](empty.md) | コンテナが空であるかどうかを調べる | + + +## 参照 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/map/map/contains.md b/reference/map/map/contains.md index 7974dba342..ba522b795e 100644 --- a/reference/map/map/contains.md +++ b/reference/map/map/contains.md @@ -6,10 +6,13 @@ * cpp20[meta cpp] ```cpp -bool contains(const key_type& x) const; // (1) +bool contains(const key_type& x) const; // (1) C++20 +constexpr bool contains(const key_type& x) const; // (1) C++26 template -bool contains(const K& x) const; // (2) +bool contains(const K& x) const; // (2) C++20 +template +constexpr bool contains(const K& x) const; // (2) C++26 ``` @@ -75,3 +78,4 @@ contain ## 参照 - [P0458R2 Checking for Existence of an Element in Associative Containers](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2018/p0458r2.html) +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/map/map/count.md b/reference/map/map/count.md index e069aa8e38..b004e6c998 100644 --- a/reference/map/map/count.md +++ b/reference/map/map/count.md @@ -5,10 +5,13 @@ * function[meta id-type] ```cpp -size_type count(const key_type& x) const; // (1) +size_type count(const key_type& x) const; // (1) C++03 +constexpr size_type count(const key_type& x) const; // (1) C++26 template -size_type count(const K& x) const; // (2) C++14 +size_type count(const K& x) const; // (2) C++14 +template +constexpr size_type count(const K& x) const; // (2) C++26 ``` ## 概要 @@ -95,3 +98,4 @@ found ## 参照 - [N3657 Adding heterogeneous comparison lookup to associative containers (rev 4)](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2013/n3657.htm) +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/map/map/crbegin.md b/reference/map/map/crbegin.md index 2a159e8908..e0665a2c9e 100644 --- a/reference/map/map/crbegin.md +++ b/reference/map/map/crbegin.md @@ -6,7 +6,8 @@ * cpp11[meta cpp] ```cpp -const_reverse_iterator crbegin() const noexcept; +const_reverse_iterator crbegin() const noexcept; // (1) C++11 +constexpr const_reverse_iterator crbegin() const noexcept; // (1) C++26 ``` ## 概要 @@ -74,3 +75,7 @@ int main() | [`map::rbegin`](rbegin.md) | 末尾を指す逆イテレータを取得する | | [`map::rend`](rend.md) | 先頭の前を指す逆イテレータを取得する | | [`map::crend`](crend.md) | 先頭の前を指す逆constイテレータを取得する | + + +## 参照 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/map/map/crend.md b/reference/map/map/crend.md index 56969981c0..cf75a56ce9 100644 --- a/reference/map/map/crend.md +++ b/reference/map/map/crend.md @@ -6,7 +6,8 @@ * cpp11[meta cpp] ```cpp -const_reverse_iterator crend() const noexcept; +const_reverse_iterator crend() const noexcept; // (1) C++11 +constexpr const_reverse_iterator crend() const noexcept; // (1) C++26 ``` @@ -72,3 +73,7 @@ int main() | [`map::rbegin`](rbegin.md) | 末尾を指す逆イテレータを取得する | | [`map::rend`](rend.md) | 先頭の前を指す逆イテレータを取得する | | [`map::crbegin`](crbegin.md) | 末尾を指す逆constイテレータを取得する | + + +## 参照 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/map/map/emplace.md b/reference/map/map/emplace.md index 171c38a253..6913c37eda 100644 --- a/reference/map/map/emplace.md +++ b/reference/map/map/emplace.md @@ -7,7 +7,9 @@ ```cpp template -pair emplace(Args&&... args); +pair emplace(Args&&... args); // (1) C++11 +template +constexpr pair emplace(Args&&... args); // (1) C++26 ``` ## 概要 @@ -161,3 +163,4 @@ CCC : (1, 2) ## 参照 - [N2680 Proposed Wording for Placement Insert (Revision 1)](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2680.pdf) +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/map/map/emplace_hint.md b/reference/map/map/emplace_hint.md index e1a3e1de1a..cbcebf0dab 100644 --- a/reference/map/map/emplace_hint.md +++ b/reference/map/map/emplace_hint.md @@ -7,7 +7,13 @@ ```cpp template -iterator emplace_hint(const_iterator hint, Args&&... args); +iterator + emplace_hint(const_iterator hint, + Args&&... args); // (1) C++11 +template +constexpr iterator + emplace_hint(const_iterator hint, + Args&&... args); // (1) C++26 ``` ## 概要 @@ -90,3 +96,4 @@ int main() ## 参照 - [N2680 Proposed Wording for Placement Insert (Revision 1)](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2680.pdf) +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/map/map/empty.md b/reference/map/map/empty.md index 3783b07107..e3495d175a 100644 --- a/reference/map/map/empty.md +++ b/reference/map/map/empty.md @@ -5,10 +5,10 @@ * function[meta id-type] ```cpp -bool empty() const; // C++03 -bool empty() const noexcept; // C++11 -[[nodiscard]] bool empty() const noexcept; // C++20 -bool empty() const noexcept; // C++26 +bool empty() const; // (1) C++03 +bool empty() const noexcept; // (1) C++11 +[[nodiscard]] bool empty() const noexcept; // (1) C++20 +constexpr bool empty() const noexcept; // (1) C++26 ``` ## 概要 @@ -66,3 +66,4 @@ int main () - C++20で`[[nodiscard]]`が付加された - [P2422R1 Remove `nodiscard` annotations from the standard library specification](https://open-std.org/jtc1/sc22/wg21/docs/papers/2024/p2422r1.html) - C++26で`[[nodiscard]]`指定が削除された +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/map/map/end.md b/reference/map/map/end.md index 24a465a391..102cb617b3 100644 --- a/reference/map/map/end.md +++ b/reference/map/map/end.md @@ -5,11 +5,13 @@ * function[meta id-type] ```cpp -iterator end(); // (1) C++03 -iterator end() noexcept; // (1) C++11 +iterator end(); // (1) C++03 +iterator end() noexcept; // (1) C++11 +constexpr iterator end() noexcept; // (1) C++26 -const_iterator end() const; // (2) C++03 -const_iterator end() const noexcept; // (2) C++11 +const_iterator end() const; // (2) C++03 +const_iterator end() const noexcept; // (2) C++11 +constexpr const_iterator end() const noexcept; // (2) C++26 ``` ## 概要 @@ -90,3 +92,7 @@ int main() | [`map::rend`](rend.md) | 先頭の前を指す逆イテレータを取得する | | [`map::crbegin`](crbegin.md) | 末尾を指す逆constイテレータを取得する | | [`map::crend`](crend.md) | 先頭の前を指す逆constイテレータを取得する | + + +## 参照 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/map/map/equal_range.md b/reference/map/map/equal_range.md index ff26455b4b..4de48054ef 100644 --- a/reference/map/map/equal_range.md +++ b/reference/map/map/equal_range.md @@ -5,17 +5,29 @@ * function[meta id-type] ```cpp -pair equal_range(const key_type& x); // (1) +pair + equal_range(const key_type& x); // (1) C++03 +constexpr pair + equal_range(const key_type& x); // (1) C++26 template -pair equal_range(const K& x); // (2) C++14 +pair + equal_range(const K& x); // (2) C++14 +template +constexpr pair + equal_range(const K& x); // (2) C++26 pair - equal_range(const key_type& x) const; // (3) + equal_range(const key_type& x) const; // (3) C++03 +constexpr pair + equal_range(const key_type& x) const; // (3) C++26 template pair - equal_range(const K& x) const; // (4) C++14 + equal_range(const K& x) const; // (4) C++14 +template +constexpr pair + equal_range(const K& x) const; // (4) C++26 ``` ## 概要 @@ -84,3 +96,4 @@ B,1 ## 参照 - [N3657 Adding heterogeneous comparison lookup to associative containers (rev 4)](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2013/n3657.htm) +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/map/map/erase.md b/reference/map/map/erase.md index fbe83e1b9d..3fe29bf14b 100644 --- a/reference/map/map/erase.md +++ b/reference/map/map/erase.md @@ -5,18 +5,24 @@ * function[meta id-type] ```cpp -void erase(iterator position); // (1) C++03 (C++11で一旦削除) -iterator erase(iterator position); // (1) C++17 +void erase(iterator position); // (1) C++03 (C++11で一旦削除) +iterator erase(iterator position); // (1) C++17 +constexpr iterator erase(iterator position); // (1) C++26 -iterator erase(const_iterator position); // (2) C++11 +iterator erase(const_iterator position); // (2) C++11 +constexpr iterator erase(const_iterator position); // (2) C++26 -size_type erase(const key_type& x); // (3) C++03 +size_type erase(const key_type& x); // (3) C++03 +constexpr size_type erase(const key_type& x); // (3) C++26 template -size_type erase(K&& x); // (4) C++23 +size_type erase(K&& x); // (4) C++23 +template +constexpr size_type erase(K&& x); // (4) C++26 -void erase(iterator first, iterator last); // (5) C++03 -iterator erase(const_iterator first, const_iterator last); // (5) C++11 +void erase(iterator first, iterator last); // (5) C++03 +iterator erase(const_iterator first, const_iterator last); // (5) C++11 +constexpr iterator erase(const_iterator first, const_iterator last); // (5) C++26 ``` ## 概要 @@ -189,3 +195,4 @@ int main() - C++17で、`erase(iterator)`を再追加 - [P2077R3 Heterogeneous erasure overloads for associative containers](https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2021/p2077r3.html) - C++23で、`template erase(K&& x)`のオーバーロードが追加された +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/map/map/erase_if_free.md b/reference/map/map/erase_if_free.md index cdd23088c0..e555fecc81 100644 --- a/reference/map/map/erase_if_free.md +++ b/reference/map/map/erase_if_free.md @@ -8,7 +8,10 @@ namespace std { template typename map::size_type - erase_if(map& c, Predicate pred); + erase_if(map& c, Predicate pred); // (1) C++20 + template + constexpr typename map::size_type + erase_if(map& c, Predicate pred); // (1) C++26 } ``` @@ -84,3 +87,4 @@ int main() ## 参照 - [P1209R0 Adopt consistent container erasure from Library Fundamentals 2](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2018/p1209r0.html) - [R1115R3 Improving the Return Value of Erase-Like Algorithms II: Free `erase`/`erase_if`](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2019/p1115r3.pdf) +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/map/map/extract.md b/reference/map/map/extract.md index 9083621c15..65eb14e71a 100644 --- a/reference/map/map/extract.md +++ b/reference/map/map/extract.md @@ -6,12 +6,16 @@ * cpp17[meta cpp] ```cpp -node_type extract(const_iterator position); // (1) C++17 +node_type extract(const_iterator position); // (1) C++17 +constexpr node_type extract(const_iterator position); // (1) C++26 -node_type extract(const key_type& x); // (2) C++17 +node_type extract(const key_type& x); // (2) C++17 +constexpr node_type extract(const key_type& x); // (2) C++26 template -node_type extract(K&& x); // (3) C++23 +node_type extract(K&& x); // (3) C++23 +template +constexpr node_type extract(K&& x); // (3) C++26 ``` ## 概要 @@ -105,3 +109,4 @@ m2 : - [Splicing Maps and Sets(Revision 5)](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/p0083r3.pdf) - [P2077R3 Heterogeneous erasure overloads for associative containers](https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2021/p2077r3.html) - C++23で、`template extract(K&& x)`のオーバーロードが追加された +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/map/map/find.md b/reference/map/map/find.md index 88261bb6e7..ca15ecfffb 100644 --- a/reference/map/map/find.md +++ b/reference/map/map/find.md @@ -5,15 +5,21 @@ * function[meta id-type] ```cpp -iterator find(const key_type& x); // (1) +iterator find(const key_type& x); // (1) C++03 +constexpr iterator find(const key_type& x); // (1) C++26 template -iterator find(const K& x); // (2) C++14 +iterator find(const K& x); // (2) C++14 +template +constexpr iterator find(const K& x); // (2) C++26 -const_iterator find(const key_type& x) const; // (3) +const_iterator find(const key_type& x) const; // (3) C++03 +constexpr const_iterator find(const key_type& x) const; // (3) C++26 template -const_iterator find(const K& x) const; // (4) C++14 +const_iterator find(const K& x) const; // (4) C++14 +template +constexpr const_iterator find(const K& x) const; // (4) C++26 ``` ## 概要 @@ -103,3 +109,4 @@ int main() ## 参照 - [N3657 Adding heterogeneous comparison lookup to associative containers (rev 4)](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2013/n3657.htm) - [LWG Issue 2299. [CD] Effects of inaccessible `key_compare::is_transparent` type are not clear](http://www.open-std.org/jtc1/sc22/wg21/docs/lwg-defects.html#2299) +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/map/map/get_allocator.md b/reference/map/map/get_allocator.md index b738036e04..e6a0975ec2 100644 --- a/reference/map/map/get_allocator.md +++ b/reference/map/map/get_allocator.md @@ -5,8 +5,9 @@ * function[meta id-type] ```cpp -allocator_type get_allocator() const; // C++03 -allocator_type get_allocator() const noexcept; // C++11 +allocator_type get_allocator() const; // (1) C++03 +allocator_type get_allocator() const noexcept; // (1) C++11 +constexpr allocator_type get_allocator() const noexcept; // (1) C++26 ``` ## 概要 @@ -70,3 +71,7 @@ b - [Visual C++](/implementation.md#visual_cpp): 2002 [mark verified], 2003 [mark verified], 2005 [mark verified], 2008 [mark verified], 2010 [mark verified], 2012 [mark verified], 2013 [mark verified], 2015 [mark verified], 2017 [mark verified] - 2012, 2013は、`noexcept`が実装されていないため、`throw()`が修飾されている。 - 2015からは、`noexcept`が修飾されている。 + + +## 参照 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/map/map/insert.md b/reference/map/map/insert.md index 4e5ef9dd3a..18926db061 100644 --- a/reference/map/map/insert.md +++ b/reference/map/map/insert.md @@ -5,28 +5,44 @@ * function[meta id-type] ```cpp -pair insert(const value_type& x); // (1) +pair insert(const value_type& x); // (1) C++03 +constexpr pair insert(const value_type& x); // (1) C++26 template -pair insert(P&& x); // (2) C++11 +pair insert(P&& x); // (2) C++11 +template +constexpr pair insert(P&& x); // (2) C++26 -pair insert(value_type&& x); // (3) C++17 +pair insert(value_type&& x); // (3) C++17 +constexpr pair insert(value_type&& x); // (3) C++26 -iterator insert(iterator position, const value_type& x); // (4) C++03まで -iterator insert(const_iterator position, const value_type& x); // (4) C++11から +iterator insert(iterator position, const value_type& x); // (4) C++03 +iterator insert(const_iterator position, const value_type& x); // (4) C++11 +constexpr iterator insert(const_iterator position, const value_type& x); // (4) C++26 template -iterator insert(const_iterator position, P&& x); // (5) C++11 +iterator insert(const_iterator position, P&& x); // (5) C++11 +template +constexpr iterator insert(const_iterator position, P&& x); // (5) C++26 -iterator insert(const_iterator position, value_type&& x); // (6) C++17 +iterator insert(const_iterator position, value_type&& x); // (6) C++17 +constexpr iterator insert(const_iterator position, value_type&& x); // (6) C++26 template -void insert(InputIterator first, InputIterator last); // (7) +void insert(InputIterator first, InputIterator last); // (7) C++03 +template +constexpr void insert(InputIterator first, InputIterator last); // (7) C++26 + +void insert(initializer_list init); // (8) C++11 +constexpr void insert(initializer_list init); // (8) C++26 -void insert(initializer_list init); // (8) C++11 +insert_return_type insert(node_type&& nh); // (9) C++17 +constexpr insert_return_type insert(node_type&& nh); // (9) C++26 -insert_return_type insert(node_type&& nh); // (9) C++17 -iterator insert(const_iterator hint, node_type&& nh); // (10) C++17 +iterator + insert(const_iterator hint, node_type&& nh); // (10) C++17 +constexpr iterator + insert(const_iterator hint, node_type&& nh); // (10) C++26 ``` * initializer_list[link /reference/initializer_list/initializer_list.md] @@ -176,3 +192,4 @@ int main () - C++14から、(2)と(4)の仕様の書き方が、`unordered_map::insert()`のものと統一された。 - [Splicing Maps and Sets(Revision 5)](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/p0083r3.pdf) - (7), (8)経緯となる提案文書 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/map/map/insert_or_assign.md b/reference/map/map/insert_or_assign.md index f29b967841..f5fb75b166 100644 --- a/reference/map/map/insert_or_assign.md +++ b/reference/map/map/insert_or_assign.md @@ -9,30 +9,53 @@ template pair insert_or_assign(const key_type& k, - M&& obj); // (1) C++17 + M&& obj); // (1) C++17 +template +constexpr pair + insert_or_assign(const key_type& k, + M&& obj); // (1) C++26 + template pair insert_or_assign(key_type&& k, - M&& obj); // (2) C++17 + M&& obj); // (2) C++17 +template +constexpr pair + insert_or_assign(key_type&& k, + M&& obj); // (2) C++26 + template -pair +constexpr pair insert_or_assign(K&& k, - M&& obj); // (3) C++26 + M&& obj); // (3) C++26 + template iterator insert_or_assign(const_iterator hint, const key_type& k, - M&& obj); // (4) C++17 + M&& obj); // (4) C++17 +template +constexpr iterator + insert_or_assign(const_iterator hint, + const key_type& k, + M&& obj); // (4) C++26 + template iterator insert_or_assign(const_iterator hint, key_type&& k, - M&& obj); // (5) C++17 + M&& obj); // (5) C++17 +template +constexpr iterator + insert_or_assign(const_iterator hint, + key_type&& k, + M&& obj); // (5) C++26 + template -iterator +constexpr iterator insert_or_assign(const_iterator hint, K&& k, - M&& obj); // (6) C++26 + M&& obj); // (6) C++26 ``` ## 概要 @@ -137,3 +160,4 @@ int main() - [N4279 Improved insertion interface for unique-key maps (Revision 2.3)](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n4279.html) - [P2363R5 Extending associative containers with the remaining heterogeneous overloads](http://open-std.org/jtc1/sc22/wg21/docs/papers/2023/p2363r5.html) - C++26で`template `のバージョンが追加された +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/map/map/insert_range.md b/reference/map/map/insert_range.md index 8a04f8c6d6..ce651fa4b3 100644 --- a/reference/map/map/insert_range.md +++ b/reference/map/map/insert_range.md @@ -7,7 +7,9 @@ ```cpp template R> -void insert_range(R&& rg); // C++23 +void insert_range(R&& rg); // (1) C++23 +template R> +constexpr void insert_range(R&& rg); // (1) C++26 ``` ## 概要 @@ -79,3 +81,7 @@ C 12 |------------------------------------------------|--------------------------------------------| | [`map::insert`](insert.md) | 要素を挿入する | | [`map::insert_or_assign`](insert_or_assign.md) | 要素を挿入、あるいは代入する | + + +## 参照 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/map/map/key_comp.md b/reference/map/map/key_comp.md index d752ac16d2..5d45358779 100644 --- a/reference/map/map/key_comp.md +++ b/reference/map/map/key_comp.md @@ -5,7 +5,8 @@ * function[meta id-type] ```cpp -key_compare key_comp() const; +key_compare key_comp() const; // (1) C++03 +constexpr key_compare key_comp() const; // (1) C++26 ``` ## 概要 @@ -58,3 +59,7 @@ int main() | [`count`](count.md) | 指定したキーにマッチする要素の数を返す | | [`lower_bound`](lower_bound.md) | 与えられた値より小さく無い最初の要素へのイテレータを返す | | [`upper_bound`](upper_bound.md) | 特定の値よりも大きい最初の要素へのイテレータを返す | + + +## 参照 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/map/map/lower_bound.md b/reference/map/map/lower_bound.md index 86343e2323..19ed957e2b 100644 --- a/reference/map/map/lower_bound.md +++ b/reference/map/map/lower_bound.md @@ -5,15 +5,21 @@ * function[meta id-type] ```cpp -iterator lower_bound(const key_type& x); // (1) +iterator lower_bound(const key_type& x); // (1) C++03 +constexpr iterator lower_bound(const key_type& x); // (1) C++26 template -iterator lower_bound(const K& x); // (2) C++14 +iterator lower_bound(const K& x); // (2) C++14 +template +constexpr iterator lower_bound(const K& x); // (2) C++26 -const_iterator lower_bound(const key_type& x) const; // (3) +const_iterator lower_bound(const key_type& x) const; // (3) C++03 +constexpr const_iterator lower_bound(const key_type& x) const; // (3) C++26 template -const_iterator lower_bound(const K& x) const; // (4) C++14 +const_iterator lower_bound(const K& x) const; // (4) C++14 +template +constexpr const_iterator lower_bound(const K& x) const; // (4) C++26 ``` ## 概要 @@ -119,3 +125,4 @@ D,5 ## 参照 - [N3657 Adding heterogeneous comparison lookup to associative containers (rev 4)](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2013/n3657.htm) +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/map/map/max_size.md b/reference/map/map/max_size.md index bd3d904a9e..944c431eda 100644 --- a/reference/map/map/max_size.md +++ b/reference/map/map/max_size.md @@ -5,8 +5,9 @@ * function[meta id-type] ```cpp -size_type max_size() const; // C++03 -size_type max_size() const noexcept; // C++11 +size_type max_size() const; // (1) C++03 +size_type max_size() const noexcept; // (1) C++11 +constexpr size_type max_size() const noexcept; // (1) C++26 ``` ## 概要 @@ -55,3 +56,7 @@ int main () | 名前 | 説明 | |-----------------------------------------------------------------------------------|--------------------------| | [`size`](size.md) | 要素数を取得する | + + +## 参照 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/map/map/merge.md b/reference/map/map/merge.md index 0b1c865e04..796ceeb336 100644 --- a/reference/map/map/merge.md +++ b/reference/map/map/merge.md @@ -7,13 +7,24 @@ ```cpp template - void merge(map& source); // (1) +void merge(map& source); // (1) C++17 template - void merge(map&& source); // (2) +constexpr void merge(map& source); // (1) C++26 + +template +void merge(map&& source); // (2) C++17 +template +constexpr void merge(map&& source); // (2) C++26 + +template +void merge(multimap& source); // (3) C++17 +template +constexpr void merge(multimap& source); // (3) C++26 + template - void merge(multimap& source); // (3) +void merge(multimap&& source); // (4) C++17 template - void merge(multimap&& source); // (4) +constexpr void merge(multimap&& source); // (4) C++26 ``` ## 概要 @@ -99,3 +110,4 @@ m2 : ## 参照 - [Splicing Maps and Sets(Revision 5)](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/p0083r3.pdf) +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/map/map/op_assign.md b/reference/map/map/op_assign.md index 0ba7ea7340..96917aa196 100644 --- a/reference/map/map/op_assign.md +++ b/reference/map/map/op_assign.md @@ -5,12 +5,14 @@ * function[meta id-type] ```cpp -map& operator=(const map& x); // (1) C++03 -map& operator=(map&& x); // (2) C++11 -map& operator=(map&& x) - noexcept(allocator_traits::is_always_equal::value - && is_nothrow_move_assignable::value); (2) // C++17 -map& operator=(initializer_list init); // (3) C++11 +map& operator=(const map& x); // (1) C++03 +constexpr map& operator=(const map& x); // (1) C++26 + +map& operator=(map&& x); // (2) C++11 +constexpr map& operator=(map&& x); // (2) C++26 + +map& operator=(initializer_list init); // (3) C++11 +constexpr map& operator=(initializer_list init); // (3) C++26 ``` ## 概要 @@ -96,3 +98,4 @@ Size of m2: 5 - (3)の経緯となる提案文書 - [N4258 Cleaning-up noexcept in the Library, Rev 3](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n4258.pdf) - `noexcept` 追加の経緯となる提案文書 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/map/map/op_at.md b/reference/map/map/op_at.md index eb7b29d3c8..c5543b4865 100644 --- a/reference/map/map/op_at.md +++ b/reference/map/map/op_at.md @@ -5,12 +5,14 @@ * function[meta id-type] ```cpp -T& operator[](const key_type& x); // (1) C++03 +T& operator[](const key_type& x); // (1) C++03 +constexpr T& operator[](const key_type& x); // (1) C++26 -T& operator[](key_type&& x); // (2) C++11 +T& operator[](key_type&& x); // (2) C++11 +constexpr T& operator[](key_type&& x); // (2) C++26 template -T& operator[](K&& x); // (3) C++26 +constexpr T& operator[](K&& x); // (3) C++26 ``` ## 概要 @@ -76,3 +78,4 @@ a ## 参照 - [P2363R5 Extending associative containers with the remaining heterogeneous overloads](http://open-std.org/jtc1/sc22/wg21/docs/papers/2023/p2363r5.html) - C++26で`template `のバージョンが追加された +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/map/map/op_compare_3way.md b/reference/map/map/op_compare_3way.md index 2575260976..99b25180ed 100644 --- a/reference/map/map/op_compare_3way.md +++ b/reference/map/map/op_compare_3way.md @@ -10,6 +10,10 @@ namespace std { synth-three-way-result> operator<=>(const map& x, const map& y); // (1) C++20 + template + constexpr synth-three-way-result> + operator<=>(const map& x, + const map& y); // (1) C++26 } ``` @@ -84,3 +88,4 @@ int main() ## 参照 - [P1614R2 The Mothership has Landed](https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2019/p1614r2.html) - C++20での三方比較演算子の追加と、関連する演算子の自動導出 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/map/map/op_constructor.md b/reference/map/map/op_constructor.md index cddd74bc36..30c80e02eb 100644 --- a/reference/map/map/op_constructor.md +++ b/reference/map/map/op_constructor.md @@ -5,53 +5,93 @@ * function[meta id-type] ```cpp -map(); // (1) C++14 から +map(); // (1) C++14 から +constexpr map(); // (1) C++26 explicit map(const Compare& comp, - const Allocator& alloc = Allocator()); // (2) C++14 から + const Allocator& alloc = Allocator()); // (2) C++14 から +constexpr explicit + map(const Compare& comp, + const Allocator& alloc = Allocator()); // (2) C++26 explicit map(const Compare& comp = Compare(), - const Allocator& alloc = Allocator()); // (1) + (2) C++11 まで + const Allocator& alloc = Allocator()); // (1) + (2) C++11 まで -explicit map(const Allocator& alloc); // (3) C++11 から +explicit map(const Allocator& alloc); // (3) C++11 から +constexpr explicit map(const Allocator& alloc); // (3) C++26 template map(InputIterator first, InputIterator last, const Compare& comp = Compare(), - const Allocator& alloc = Allocator()); // (4) + const Allocator& alloc = Allocator()); // (4) C++03 +template +constexpr + map(InputIterator first, + InputIterator last, + const Compare& comp = Compare(), + const Allocator& alloc = Allocator()); // (4) C++26 template map(InputIterator first, InputIterator last, - const Allocator& alloc); // (5) C++14 から + const Allocator& alloc); // (5) C++14 +template +constexpr + map(InputIterator first, + InputIterator last, + const Allocator& alloc); // (5) C++26 -map(const map& x); // (6) +map(const map& x); // (6) C++03 +constexpr map(const map& x); // (6) C++26 -map(const map& x, const Allocator& alloc); // (7) C++11 +map(const map& x, const Allocator& alloc); // (7) C++11 map(const map& x, - const type_identity_t& alloc); // (7) C++23 + const type_identity_t& alloc); // (7) C++23 +constexpr + map(const map& x, + const type_identity_t& alloc); // (7) C++26 -map(map&& y); // (8) C++11 から +map(map&& y); // (8) C++11 +constexpr map(map&& y); // (8) C++26 map(map&& y, const Allocator& alloc); // (9) C++11 map(map&& y, const type_identity_t& alloc); // (9) C++23 +constexpr + map(map&& y, + const type_identity_t& alloc); // (9) C++26 map(initializer_list init, const Compare& comp = Compare(), - const Allocator& alloc = Allocator()); // (10) C++11 から + const Allocator& alloc = Allocator()); // (10) C++11 +constexpr + map(initializer_list init, + const Compare& comp = Compare(), + const Allocator& alloc = Allocator()); // (10) C++26 map(initializer_list init, - const Allocator& alloc); // (11) C++14 から + const Allocator& alloc); // (11) C++14 +constexpr + map(initializer_list init, + const Allocator& alloc); // (11) C++26 template R> map(from_range_t, R&& rg, const Compare& comp = Compare(), - const Allocator& alloc = Allocator()); // (12) C++23 から + const Allocator& alloc = Allocator()); // (12) C++23 +template R> +constexpr + map(from_range_t, R&& rg, + const Compare& comp = Compare(), + const Allocator& alloc = Allocator()); // (12) C++26 template R> map(from_range_t, R&& rg, - const Allocator& alloc); // (13) C++23 から + const Allocator& alloc); // (13) C++23 +template R> +constexpr + map(from_range_t, R&& rg, + const Allocator& alloc); // (13) C++26 ``` * type_identity_t[link /reference/type_traits/type_identity.md] * initializer_list[link ../../initializer_list.md] @@ -176,3 +216,4 @@ Size of m2: 2 なお、Discussion の例はアロケータの型が誤っているので注意 - [P1518R2 Stop Overconstraining Allocators in Container Deduction Guides](https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2021/p1518r2.html) - C++23でのアロケータ引数を`type_identity_t`で包む変更 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/map/map/op_destructor.md b/reference/map/map/op_destructor.md index 386bdd6ad4..271a9abc0a 100644 --- a/reference/map/map/op_destructor.md +++ b/reference/map/map/op_destructor.md @@ -5,7 +5,8 @@ * function[meta id-type] ```cpp -~map(); +~map(); // (1) C++03 +constexpr ~map(); // (1) C++26 ``` ## 概要 @@ -14,3 +15,7 @@ ## 計算量 [`size()`](size.md) に対して線形時間(デストラクタ呼び出し) + + +## 参照 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/map/map/op_equal.md b/reference/map/map/op_equal.md index 3b1729ec33..2295d541e2 100644 --- a/reference/map/map/op_equal.md +++ b/reference/map/map/op_equal.md @@ -9,6 +9,10 @@ namespace std { bool operator==(const map& x, const map& y); // (1) C++03 + template + constexpr bool + operator==(const map& x, + const map& y); // (1) C++26 } ``` @@ -70,3 +74,4 @@ int main() - C++14から、2つ目のイテレータ範囲のendイテレータをとる`equal()`アルゴリズムを使用するようになった。 - [P1614R2 The Mothership has Landed](https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2019/p1614r2.html) - C++20での三方比較演算子の追加と、関連する演算子の自動導出 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/map/map/op_greater.md b/reference/map/map/op_greater.md index e370347afb..9ac94b37fc 100644 --- a/reference/map/map/op_greater.md +++ b/reference/map/map/op_greater.md @@ -10,6 +10,10 @@ namespace std { bool operator>(const map& x, const map& y); // (1) C++03 + template + constexpr bool + operator>(const map& x, + const map& y); // (1) C++26 } ``` @@ -71,3 +75,4 @@ int main() ## 参照 - [P1614R2 The Mothership has Landed](https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2019/p1614r2.html) - C++20での三方比較演算子の追加と、関連する演算子の自動導出 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/map/map/op_greater_equal.md b/reference/map/map/op_greater_equal.md index d5b1df4b9a..c118d6b020 100644 --- a/reference/map/map/op_greater_equal.md +++ b/reference/map/map/op_greater_equal.md @@ -9,7 +9,11 @@ namespace std { template bool operator>=(const map& x, - const map& y); + const map& y); // (1) C++03 + template + constexpr bool + operator>=(const map& x, + const map& y); // (1) C++26 } ``` @@ -64,3 +68,4 @@ int main() ## 参照 - [P1614R2 The Mothership has Landed](https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2019/p1614r2.html) - C++20での三方比較演算子の追加と、関連する演算子の自動導出 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/map/map/op_less.md b/reference/map/map/op_less.md index e3d2883901..5a6307ec52 100644 --- a/reference/map/map/op_less.md +++ b/reference/map/map/op_less.md @@ -10,6 +10,10 @@ namespace std { bool operator<(const map& x, const map& y); // (1) C++03 + template + constexpr bool + operator<(const map& x, + const map& y); // (1) C++26 } ``` @@ -75,3 +79,4 @@ int main() ## 参照 - [P1614R2 The Mothership has Landed](https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2019/p1614r2.html) - C++20での三方比較演算子の追加と、関連する演算子の自動導出 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/map/map/op_less_equal.md b/reference/map/map/op_less_equal.md index 4c21a10abc..ad7322cdcc 100644 --- a/reference/map/map/op_less_equal.md +++ b/reference/map/map/op_less_equal.md @@ -10,6 +10,10 @@ namespace std { bool operator<=(const map& x, const map& y); // (1) C++03 + template + constexpr bool + operator<=(const map& x, + const map& y); // (1) C++26 } ``` @@ -64,3 +68,4 @@ int main() ## 参照 - [P1614R2 The Mothership has Landed](https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2019/p1614r2.html) - C++20での三方比較演算子の追加と、関連する演算子の自動導出 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/map/map/op_not_equal.md b/reference/map/map/op_not_equal.md index b30d6da0a7..7ec44659c8 100644 --- a/reference/map/map/op_not_equal.md +++ b/reference/map/map/op_not_equal.md @@ -10,6 +10,10 @@ namespace std { bool operator!=(const map& x, const map& y); // (1) C++03 + template + constexpr bool + operator!=(const map& x, + const map& y); // (1) C++26 } ``` @@ -70,3 +74,4 @@ int main() ## 参照 - [P1614R2 The Mothership has Landed](https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2019/p1614r2.html) - C++20での三方比較演算子の追加と、関連する演算子の自動導出 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/map/map/rbegin.md b/reference/map/map/rbegin.md index 0f7c4387f8..98aab9ac54 100644 --- a/reference/map/map/rbegin.md +++ b/reference/map/map/rbegin.md @@ -5,11 +5,13 @@ * function[meta id-type] ```cpp -reverse_iterator rbegin(); // (1) C++03 -reverse_iterator rbegin() noexcept; // (1) C++11 +reverse_iterator rbegin(); // (1) C++03 +reverse_iterator rbegin() noexcept; // (1) C++11 +constexpr reverse_iterator rbegin() noexcept; // (1) C++26 -const_reverse_iterator rbegin() const; // (2) C++03 -const_reverse_iterator rbegin() const noexcept; // (2) C++11 +const_reverse_iterator rbegin() const; // (2) C++03 +const_reverse_iterator rbegin() const noexcept; // (2) C++11 +constexpr const_reverse_iterator rbegin() const noexcept; // (2) C++26 ``` ## 概要 @@ -77,3 +79,7 @@ int main() | [`map::rend`](rend.md) | 先頭の前を指す逆イテレータを取得する | | [`map::crbegin`](crbegin.md) | 末尾を指す逆constイテレータを取得する | | [`map::crend`](crend.md) | 先頭の前を指す逆constイテレータを取得する | + + +## 参照 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/map/map/rend.md b/reference/map/map/rend.md index 4c4c53ca7a..f273a708a3 100644 --- a/reference/map/map/rend.md +++ b/reference/map/map/rend.md @@ -5,11 +5,13 @@ * function[meta id-type] ```cpp -reverse_iterator rend(); // (1) C++03 -reverse_iterator rend() noexcept; // (1) C++11 +reverse_iterator rend(); // (1) C++03 +reverse_iterator rend() noexcept; // (1) C++11 +constexpr reverse_iterator rend() noexcept; // (1) C++26 -const_reverse_iterator rend() const; // (2) C++03 -const_reverse_iterator rend() const noexcept; // (2) C++11 +const_reverse_iterator rend() const; // (2) C++03 +const_reverse_iterator rend() const noexcept; // (2) C++11 +constexpr const_reverse_iterator rend() const noexcept; // (2) C++26 ``` ## 概要 @@ -71,3 +73,7 @@ int main() | [`map::rbegin`](rbegin.md) | 末尾を指す逆イテレータを取得する | | [`map::crbegin`](crbegin.md) | 末尾を指す逆constイテレータを取得する | | [`map::crend`](crend.md) | 先頭の前を指す逆constイテレータを取得する | + + +## 参照 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/map/map/size.md b/reference/map/map/size.md index 4effa4cbb8..cf0e6cb096 100644 --- a/reference/map/map/size.md +++ b/reference/map/map/size.md @@ -5,8 +5,9 @@ * function[meta id-type] ```cpp -size_type size() const; // C++03 -size_type size() const noexcept; // C++11 +size_type size() const; // (1) C++03 +size_type size() const noexcept; // (1) C++11 +constexpr size_type size() const noexcept; // (1) C++26 ``` ## 概要 @@ -69,3 +70,7 @@ int main () |-------------------------------------------------------------------------------------------|-----------------------------------------------------| | [`max_size`](max_size.md) | 格納可能な最大の要素数を取得する | | [`empty`](empty.md) | コンテナが空であるかどうかを調べる | + + +## 参照 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/map/map/swap.md b/reference/map/map/swap.md index 06962518d7..51387a65aa 100644 --- a/reference/map/map/swap.md +++ b/reference/map/map/swap.md @@ -5,10 +5,16 @@ * function[meta id-type] ```cpp -void swap(map& st); -void swap(map& x) - noexcept(allocator_traits::is_always_equal::value - && noexcept(swap(declval(),declval()))); // C++17 +void + swap(map& st); // (1) C++03 +void + swap(map& x) + noexcept(allocator_traits::is_always_equal::value + && noexcept(swap(declval(),declval()))); // (1) C++17 +constexpr void + swap(map& x) + noexcept(allocator_traits::is_always_equal::value + && noexcept(swap(declval(),declval()))); // (1) C++26 ``` ## 概要 @@ -80,3 +86,4 @@ m2 : {[10,a], [20,b], [30,c], } ## 参照 - [N4258 Cleaning-up noexcept in the Library, Rev 3](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n4258.pdf) - `noexcept` 追加の経緯となる提案文書 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/map/map/swap_free.md b/reference/map/map/swap_free.md index c0777215c3..722fee6407 100644 --- a/reference/map/map/swap_free.md +++ b/reference/map/map/swap_free.md @@ -6,13 +6,19 @@ ```cpp namespace std { template - void swap(map& x, - map& y); - + void + swap(map& x, + map& y); // (1) C++03 + template + void + swap(map& x, + map& y) + noexcept(noexcept(x.swap(y))); // (1) C++17 template - void swap(map& x, - map& y) - noexcept(noexcept(x.swap(y))); // C++17 + constexpr void + swap(map& x, + map& y) + noexcept(noexcept(x.swap(y))); // (1) C++26 } ``` @@ -90,3 +96,4 @@ m2 : {[10,a], [20,b], [30,c], } ## 参照 - [N4258 Cleaning-up noexcept in the Library, Rev 3](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n4258.pdf) - `noexcept` 追加の経緯となる提案文書 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/map/map/try_emplace.md b/reference/map/map/try_emplace.md index 6763461a7f..8b75cadd28 100644 --- a/reference/map/map/try_emplace.md +++ b/reference/map/map/try_emplace.md @@ -9,32 +9,48 @@ template pair try_emplace(const key_type& k, Args&&... args); // (1) C++17 +template +constexpr pair + try_emplace(const key_type& k, Args&&... args); // (1) C++26 template pair - try_emplace(key_type&& k, Args&&... args); // (2) C++17 + try_emplace(key_type&& k, Args&&... args); // (2) C++17 +template +constexpr pair + try_emplace(key_type&& k, Args&&... args); // (2) C++26 template iterator try_emplace(const_iterator hint, const key_type& k, - Args&&... args); // (3) C++17 + Args&&... args); // (3) C++17 +template +constexpr iterator + try_emplace(const_iterator hint, + const key_type& k, + Args&&... args); // (3) C++26 template iterator try_emplace(const_iterator hint, key_type&& k, - Args&&... args); // (4) C++17 + Args&&... args); // (4) C++17 +template +constexpr iterator + try_emplace(const_iterator hint, + key_type&& k, + Args&&... args); // (4) C++26 template -pair +constexpr pair try_emplace(K&& k, Args&&... args); // (5) C++26 template -iterator +constexpr iterator try_emplace(const_iterator hint, K&& k, - Args&&... args); // (6) C++26 + Args&&... args); // (6) C++26 ``` ## 概要 @@ -150,3 +166,4 @@ false, 114, false - [N4279 Improved insertion interface for unique-key maps (Revision 2.3)](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n4279.html) - [P2363R5: Extending associative containers with the remaining heterogeneous overloads](https://open-std.org/jtc1/sc22/wg21/docs/papers/2023/p2363r5.html) - C++26で`template `のバージョンが追加された +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/map/map/upper_bound.md b/reference/map/map/upper_bound.md index 3dc23a0344..65b1a09b9d 100644 --- a/reference/map/map/upper_bound.md +++ b/reference/map/map/upper_bound.md @@ -5,15 +5,21 @@ * function[meta id-type] ```cpp -iterator upper_bound(const key_type& x); // (1) +iterator upper_bound(const key_type& x); // (1) C++03 +constexpr iterator upper_bound(const key_type& x); // (1) C++26 template -iterator upper_bound(const K& x); // (2) C++14 +iterator upper_bound(const K& x); // (2) C++14 +template +constexpr iterator upper_bound(const K& x); // (2) C++26 -const_iterator upper_bound(const key_type& x) const; // (3) +const_iterator upper_bound(const key_type& x) const; // (3) C++03 +constexpr const_iterator upper_bound(const key_type& x) const; // (3) C++26 template -const_iterator upper_bound(const K& x) const; // (4) C++14 +const_iterator upper_bound(const K& x) const; // (4) C++14 +template +constexpr const_iterator upper_bound(const K& x) const; // (4) C++26 ``` ## 概要 @@ -119,3 +125,4 @@ D,5 ## 参照 - [N3657 Adding heterogeneous comparison lookup to associative containers (rev 4)](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2013/n3657.htm) +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/map/map/value_comp.md b/reference/map/map/value_comp.md index 41311abb3b..14a732841b 100644 --- a/reference/map/map/value_comp.md +++ b/reference/map/map/value_comp.md @@ -5,7 +5,8 @@ * function[meta id-type] ```cpp -value_compare value_comp() const; +value_compare value_comp() const; // (1) C++03 +constexpr value_compare value_comp() const; // (1) C++26 ``` ## 概要 @@ -65,3 +66,7 @@ int main() | [`count`](count.md) | 指定したキーにマッチする要素の数を返す | | [`lower_bound`](lower_bound.md) | 与えられた値より小さくない最初の要素へのイテレータを返す | | [`upper_bound`](upper_bound.md) | 特定の値よりも大きい最初の要素へのイテレータを返す | + + +## 参照 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/map/multimap/begin.md b/reference/map/multimap/begin.md index 1708b1c07b..b1a3fa2fbe 100644 --- a/reference/map/multimap/begin.md +++ b/reference/map/multimap/begin.md @@ -5,11 +5,13 @@ * function[meta id-type] ```cpp -iterator begin(); // (1) C++03 -iterator begin() noexcept; // (1) C++11 +iterator begin(); // (1) C++03 +iterator begin() noexcept; // (1) C++11 +constexpr iterator begin() noexcept; // (1) C++26 -const_iterator begin() const; // (2) C++03 -const_iterator begin() const noexcept; // (2) C++11 +const_iterator begin() const; // (2) C++03 +const_iterator begin() const noexcept; // (2) C++11 +constexpr const_iterator begin() const noexcept; // (2) C++26 ``` @@ -91,3 +93,7 @@ int main() | [`multimap::rend`](rend.md) | 先頭の前を指す逆イテレータを取得する | | [`multimap::crbegin`](crbegin.md) | 末尾を指す逆constイテレータを取得する | | [`multimap::crend`](crend.md) | 先頭の前を指す逆constイテレータを取得する | + + +## 参照 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/map/multimap/cbegin.md b/reference/map/multimap/cbegin.md index e994d7e924..dea8b2ec85 100644 --- a/reference/map/multimap/cbegin.md +++ b/reference/map/multimap/cbegin.md @@ -6,7 +6,8 @@ * cpp11[meta cpp] ```cpp -const_iterator cbegin() const noexcept; +const_iterator cbegin() const noexcept; // (1) C++11 +constexpr const_iterator cbegin() const noexcept; // (1) C++26 ``` ## 概要 @@ -83,3 +84,7 @@ int main() | [`multimap::rend`](rend.md) | 先頭の前を指す逆イテレータを取得する | | [`multimap::crbegin`](crbegin.md) | 末尾を指す逆constイテレータを取得する | | [`multimap::crend`](crend.md) | 先頭の前を指す逆constイテレータを取得する | + + +## 参照 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/map/multimap/cend.md b/reference/map/multimap/cend.md index 363c48347f..8d66b10d22 100644 --- a/reference/map/multimap/cend.md +++ b/reference/map/multimap/cend.md @@ -6,7 +6,8 @@ * cpp11[meta cpp] ```cpp -const_iterator cend() const noexcept; +const_iterator cend() const noexcept; // (1) C++11 +constexpr const_iterator cend() const noexcept; // (1) C++26 ``` ## 概要 @@ -89,3 +90,7 @@ int main() | [`multimap::rend`](rend.md) | 先頭の前を指す逆イテレータを取得する | | [`multimap::crbegin`](crbegin.md) | 末尾を指す逆constイテレータを取得する | | [`multimap::crend`](crend.md) | 先頭の前を指す逆constイテレータを取得する | + + +## 参照 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/map/multimap/clear.md b/reference/map/multimap/clear.md index ec97f3c360..7916dbb3b9 100644 --- a/reference/map/multimap/clear.md +++ b/reference/map/multimap/clear.md @@ -5,8 +5,9 @@ * function[meta id-type] ```cpp -void clear(); // C++03 -void clear() noexcept; // C++11 +void clear(); // (1) C++03 +void clear() noexcept; // (1) C++11 +constexpr void clear() noexcept; // (1) C++26 ``` ## 概要 @@ -69,3 +70,7 @@ int main() | [`multimap::erase`](erase.md) | 要素を削除する | | [`multimap::size`](size.md) | 要素数を取得する | | [`multimap::empty`](empty.md) | コンテナが空であるかどうかを調べる | + + +## 参照 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/map/multimap/contains.md b/reference/map/multimap/contains.md index c13b617750..97849403b9 100644 --- a/reference/map/multimap/contains.md +++ b/reference/map/multimap/contains.md @@ -6,10 +6,13 @@ * cpp20[meta cpp] ```cpp -bool contains(const key_type& x) const; // (1) +bool contains(const key_type& x) const; // (1) C++20 +constexpr bool contains(const key_type& x) const; // (1) C++26 template -bool contains(const K& x) const; // (2) +bool contains(const K& x) const; // (2) C++20 +template +constexpr bool contains(const K& x) const; // (2) C++26 ``` @@ -75,3 +78,4 @@ contain ## 参照 - [P0458R2 Checking for Existence of an Element in Associative Containers](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2018/p0458r2.html) +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/map/multimap/count.md b/reference/map/multimap/count.md index 1cae65de68..4b159f12af 100644 --- a/reference/map/multimap/count.md +++ b/reference/map/multimap/count.md @@ -5,10 +5,13 @@ * function[meta id-type] ```cpp -size_type count(const key_type& x) const; // (1) +size_type count(const key_type& x) const; // (1) C++03 +constexpr size_type count(const key_type& x) const; // (1) C++26 template -size_type count(const K& x) const; // (2) C++14 +size_type count(const K& x) const; // (2) C++14 +template +constexpr size_type count(const K& x) const; // (2) C++26 ``` ## 概要 @@ -89,3 +92,4 @@ int main() ## 参照 - [N3657 Adding heterogeneous comparison lookup to associative containers (rev 4)](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2013/n3657.htm) +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/map/multimap/crbegin.md b/reference/map/multimap/crbegin.md index 4c93666f82..f17389b009 100644 --- a/reference/map/multimap/crbegin.md +++ b/reference/map/multimap/crbegin.md @@ -6,7 +6,8 @@ * cpp11[meta cpp] ```cpp -const_reverse_iterator crbegin() const noexcept; +const_reverse_iterator crbegin() const noexcept; // (1) C++11 +constexpr const_reverse_iterator crbegin() const noexcept; // (1) C++26 ``` ## 概要 @@ -75,3 +76,7 @@ int main() | [`multimap::rbegin`](rbegin.md) | 末尾を指す逆イテレータを取得する | | [`multimap::rend`](rend.md) | 先頭の前を指す逆イテレータを取得する | | [`multimap::crend`](crend.md) | 先頭の前を指す逆constイテレータを取得する | + + +## 参照 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/map/multimap/crend.md b/reference/map/multimap/crend.md index a4fcc0c0e7..03688ca9c9 100644 --- a/reference/map/multimap/crend.md +++ b/reference/map/multimap/crend.md @@ -6,7 +6,8 @@ * cpp11[meta cpp] ```cpp -const_reverse_iterator crend() const noexcept; +const_reverse_iterator crend() const noexcept; // (1) C++11 +constexpr const_reverse_iterator crend() const noexcept; // (1) C++26 ``` @@ -73,3 +74,7 @@ int main() | [`multimap::rbegin`](rbegin.md) | 末尾を指す逆イテレータを取得する | | [`multimap::rend`](rend.md) | 先頭の前を指す逆イテレータを取得する | | [`multimap::crbegin`](crbegin.md) | 末尾を指す逆constイテレータを取得する | + + +## 参照 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/map/multimap/emplace.md b/reference/map/multimap/emplace.md index 60108f7e77..2d450975b7 100644 --- a/reference/map/multimap/emplace.md +++ b/reference/map/multimap/emplace.md @@ -7,7 +7,9 @@ ```cpp template -iterator emplace(Args&&... args); +iterator emplace(Args&&... args); // (1) C++11 +template +constexpr iterator emplace(Args&&... args); // (1) C++26 ``` ## 概要 @@ -120,3 +122,4 @@ CCC : (1, 2) ## 参照 - [N2680 Proposed Wording for Placement Insert (Revision 1)](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2680.pdf) +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/map/multimap/emplace_hint.md b/reference/map/multimap/emplace_hint.md index 26f17f10a4..c9880fc1d8 100644 --- a/reference/map/multimap/emplace_hint.md +++ b/reference/map/multimap/emplace_hint.md @@ -7,7 +7,13 @@ ```cpp template -iterator emplace_hint(const_iterator hint, Args&&... args); +iterator + emplace_hint(const_iterator hint, + Args&&... args); // (1) C++11 +template +constexpr iterator + emplace_hint(const_iterator hint, + Args&&... args); // (1) C++26 ``` ## 概要 @@ -87,3 +93,4 @@ int main() ## 参照 - [N2680 Proposed Wording for Placement Insert (Revision 1)](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2680.pdf) +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/map/multimap/empty.md b/reference/map/multimap/empty.md index 529615da1f..3774649e03 100644 --- a/reference/map/multimap/empty.md +++ b/reference/map/multimap/empty.md @@ -5,10 +5,10 @@ * function[meta id-type] ```cpp -bool empty() const; // C++03 -bool empty() const noexcept; // C++11 -[[nodiscard]] bool empty() const noexcept; // C++20 -bool empty() const noexcept; // C++26 +bool empty() const; // (1) C++03 +bool empty() const noexcept; // (1) C++11 +[[nodiscard]] bool empty() const noexcept; // (1) C++20 +constexpr bool empty() const noexcept; // (1) C++26 ``` ## 概要 @@ -66,3 +66,4 @@ int main () - C++20で`[[nodiscard]]`が付加された - [P2422R1 Remove `nodiscard` annotations from the standard library specification](https://open-std.org/jtc1/sc22/wg21/docs/papers/2024/p2422r1.html) - C++26で`[[nodiscard]]`指定が削除された +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/map/multimap/end.md b/reference/map/multimap/end.md index 826c870306..ef2ea86a45 100644 --- a/reference/map/multimap/end.md +++ b/reference/map/multimap/end.md @@ -5,11 +5,13 @@ * function[meta id-type] ```cpp -iterator end(); // (1) C++03 -iterator end() noexcept; // (1) C++11 +iterator end(); // (1) C++03 +iterator end() noexcept; // (1) C++11 +constexpr iterator end() noexcept; // (1) C++26 -const_iterator end() const; // (2) C++03 -const_iterator end() const noexcept; // (2) C++11 +const_iterator end() const; // (2) C++03 +const_iterator end() const noexcept; // (2) C++11 +constexpr const_iterator end() const noexcept; // (2) C++26 ``` ## 概要 @@ -93,3 +95,7 @@ int main() | [`multimap::rend`](rend.md) | 先頭の前を指す逆イテレータを取得する | | [`multimap::crbegin`](crbegin.md) | 末尾を指す逆constイテレータを取得する | | [`multimap::crend`](crend.md) | 先頭の前を指す逆constイテレータを取得する | + + +## 参照 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/map/multimap/equal_range.md b/reference/map/multimap/equal_range.md index 9af81c1900..1e6fcf848f 100644 --- a/reference/map/multimap/equal_range.md +++ b/reference/map/multimap/equal_range.md @@ -5,17 +5,29 @@ * function[meta id-type] ```cpp -pair equal_range(const key_type& x); // (1) +pair + equal_range(const key_type& x); // (1) C++03 +constexpr pair + equal_range(const key_type& x); // (1) C++26 template -pair equal_range(const K& x); // (2) C++14 +pair + equal_range(const K& x); // (2) C++14 +template +constexpr pair + equal_range(const K& x); // (2) C++26 pair - equal_range(const key_type& x) const; // (3) + equal_range(const key_type& x) const; // (3) C++03 +constexpr pair + equal_range(const key_type& x) const; // (3) C++26 template pair - equal_range(const K& x) const; // (4) C++14 + equal_range(const K& x) const; // (4) C++14 +template +constexpr pair + equal_range(const K& x) const; // (4) C++26 ``` ## 概要 @@ -89,3 +101,4 @@ B,2 ## 参照 - [N3657 Adding heterogeneous comparison lookup to associative containers (rev 4)](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2013/n3657.htm) +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/map/multimap/erase.md b/reference/map/multimap/erase.md index aea7de4822..0483bc9d7c 100644 --- a/reference/map/multimap/erase.md +++ b/reference/map/multimap/erase.md @@ -5,18 +5,24 @@ * function[meta id-type] ```cpp -void erase(iterator position); // (1) C++03 (C++11で一旦削除) -iterator erase(iterator position); // (1) C++17 +void erase(iterator position); // (1) C++03 (C++11で一旦削除) +iterator erase(iterator position); // (1) C++17 +constexpr iterator erase(iterator position); // (1) C++26 -iterator erase(const_iterator position); // (2) C++11 +iterator erase(const_iterator position); // (2) C++11 +constexpr iterator erase(const_iterator position); // (2) C++26 -size_type erase(const key_type& x); // (3) C++03 +size_type erase(const key_type& x); // (3) C++03 +constexpr size_type erase(const key_type& x); // (3) C++26 template -size_type erase(K&& x); // (4) C++23 +size_type erase(K&& x); // (4) C++23 +template +constexpr size_type erase(K&& x); // (4) C++26 -void erase(iterator first, iterator last); // (5) C++03 -iterator erase(const_iterator first, const_iterator last); // (5) C++11 +void erase(iterator first, iterator last); // (5) C++03 +iterator erase(const_iterator first, const_iterator last); // (5) C++11 +constexpr iterator erase(const_iterator first, const_iterator last); // (5) C++26 ``` @@ -178,3 +184,4 @@ int main() - C++17で、`erase(iterator)`を再追加 - [P2077R3 Heterogeneous erasure overloads for associative containers](https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2021/p2077r3.html) - C++23で、`template erase(K&& x)`のオーバーロードが追加された +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/map/multimap/erase_if_free.md b/reference/map/multimap/erase_if_free.md index 59458a3a42..7f118d43b5 100644 --- a/reference/map/multimap/erase_if_free.md +++ b/reference/map/multimap/erase_if_free.md @@ -8,7 +8,10 @@ namespace std { template typename multimap::size_type - erase_if(multimap& c, Predicate pred); + erase_if(multimap& c, Predicate pred); // (1) C++20 + template + constexpr typename multimap::size_type + erase_if(multimap& c, Predicate pred); // (1) C++26 } ``` @@ -84,3 +87,4 @@ int main() ## 参照 - [P1209R0 Adopt consistent container erasure from Library Fundamentals 2](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2018/p1209r0.html) - [R1115R3 Improving the Return Value of Erase-Like Algorithms II: Free `erase`/`erase_if`](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2019/p1115r3.pdf) +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/map/multimap/extract.md b/reference/map/multimap/extract.md index 0a15458ddd..97d3d6be6f 100644 --- a/reference/map/multimap/extract.md +++ b/reference/map/multimap/extract.md @@ -6,12 +6,16 @@ * cpp17[meta cpp] ```cpp -node_type extract(const_iterator position); // (1) C++17 +node_type extract(const_iterator position); // (1) C++17 +constexpr node_type extract(const_iterator position); // (1) C++26 -node_type extract(const key_type& x); // (2) C++17 +node_type extract(const key_type& x); // (2) C++17 +constexpr node_type extract(const key_type& x); // (2) C++26 template -node_type extract(K&& x); // (3) C++23 +node_type extract(K&& x); // (3) C++23 +template +constexpr node_type extract(K&& x); // (3) C++26 ``` ## 概要 @@ -105,3 +109,4 @@ m2 : - [Splicing Maps and Sets(Revision 5)](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/p0083r3.pdf) - [P2077R3 Heterogeneous erasure overloads for associative containers](https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2021/p2077r3.html) - C++23で、`template extract(K&& x)`のオーバーロードが追加された +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/map/multimap/find.md b/reference/map/multimap/find.md index c531420864..87a1f3c1eb 100644 --- a/reference/map/multimap/find.md +++ b/reference/map/multimap/find.md @@ -5,15 +5,21 @@ * function[meta id-type] ```cpp -iterator find(const key_type& x); // (1) +iterator find(const key_type& x); // (1) C++03 +constexpr iterator find(const key_type& x); // (1) C++26 template -iterator find(const K& x); // (2) C++14 +iterator find(const K& x); // (2) C++14 +template +constexpr iterator find(const K& x); // (2) C++26 -const_iterator find(const key_type& x) const; // (3) +const_iterator find(const key_type& x) const; // (3) C++03 +constexpr const_iterator find(const key_type& x) const; // (3) C++26 template -const_iterator find(const K& x) const; // (4) C++14 +const_iterator find(const K& x) const; // (4) C++14 +template +constexpr const_iterator find(const K& x) const; // (4) C++26 ``` ## 概要 @@ -105,3 +111,4 @@ int main() ## 参照 - [N3657 Adding heterogeneous comparison lookup to associative containers (rev 4)](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2013/n3657.htm) - [LWG Issue 2299. [CD] Effects of inaccessible `key_compare::is_transparent` type are not clear](http://www.open-std.org/jtc1/sc22/wg21/docs/lwg-defects.html#2299) +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/map/multimap/get_allocator.md b/reference/map/multimap/get_allocator.md index a96bc5a414..1c9019801e 100644 --- a/reference/map/multimap/get_allocator.md +++ b/reference/map/multimap/get_allocator.md @@ -5,8 +5,9 @@ * function[meta id-type] ```cpp -allocator_type get_allocator() const; // C++03 -allocator_type get_allocator() const noexcept; // C++11 +allocator_type get_allocator() const; // (1) C++03 +allocator_type get_allocator() const noexcept; // (1) C++11 +constexpr allocator_type get_allocator() const noexcept; // (1) C++26 ``` ## 概要 @@ -69,3 +70,7 @@ b - [Visual C++](/implementation.md#visual_cpp): 2002 [mark verified], 2003 [mark verified], 2005 [mark verified], 2008 [mark verified], 2010 [mark verified], 2012 [mark verified], 2013 [mark verified], 2015 [mark verified], 2017 [mark verified] - 2012, 2013は、`noexcept`が実装されていないため、`throw()`が修飾されている。 - 2015からは、`noexcept`が修飾されている。 + + +## 参照 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/map/multimap/insert.md b/reference/map/multimap/insert.md index a073847669..70009aa8f2 100644 --- a/reference/map/multimap/insert.md +++ b/reference/map/multimap/insert.md @@ -5,27 +5,42 @@ * function[meta id-type] ```cpp -iterator insert(const value_type& x); // (1) -iterator insert(value_type&& y); // (2) C++17 +iterator insert(const value_type& x); // (1) C++03 +constexpr iterator insert(const value_type& x); // (1) C++26 +iterator insert(value_type&& y); // (2) C++17 +constexpr iterator insert(value_type&& y); // (2) C++26 + +template +iterator insert(P&& x); // (3) C++11 template -iterator insert(P&& x); // (3) C++11 +constexpr iterator insert(P&& x); // (3) C++26 -iterator insert(iterator position, const value_type& x); // (4) C++03 -iterator insert(const_iterator position, const value_type& x); // (4) C++11 +iterator insert(iterator position, const value_type& x); // (4) C++03 +iterator insert(const_iterator position, const value_type& x); // (4) C++11 +constexpr iterator insert(const_iterator position, const value_type& x); // (4) C++26 -iterator insert(const_iterator position, value_type&& y); // (5) C++17 +iterator insert(const_iterator position, value_type&& y); // (5) C++17 +constexpr iterator insert(const_iterator position, value_type&& y); // (5) C++26 template -iterator insert(const_iterator position, P&& x); // (6) C++11 +iterator insert(const_iterator position, P&& x); // (6) C++11 +template +constexpr iterator insert(const_iterator position, P&& x); // (6) C++26 template -void insert(InputIterator first, InputIterator last); // (7) +void insert(InputIterator first, InputIterator last); // (7) C++03 +template +constexpr void insert(InputIterator first, InputIterator last); // (7) C++26 + +void insert(initializer_list init); // (8) C++11 +constexpr void insert(initializer_list init); // (8) C++26 -void insert(initializer_list init); // (8) C++11 +iterator insert(node_type&& nh); // (9) C++17 +constexpr iterator insert(node_type&& nh); // (9) C++26 -iterator insert(node_type&& nh); // (9) C++17 -iterator insert(const_iterator hint, node_type&& nh); // (10) C++17 +iterator insert(const_iterator hint, node_type&& nh); // (10) C++17 +constexpr iterator insert(const_iterator hint, node_type&& nh); // (10) C++26 ``` * initializer_list[link /reference/initializer_list/initializer_list.md] @@ -136,3 +151,4 @@ int main () - C++14から、(3)と(6)の仕様の書き方が、`unordered_map::insert()`のものと統一された。 - [Splicing Maps and Sets(Revision 5)](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/p0083r3.pdf) - (9), (10)経緯となる提案文書 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/map/multimap/insert_range.md b/reference/map/multimap/insert_range.md index 6e0baca7c6..09a66f54cb 100644 --- a/reference/map/multimap/insert_range.md +++ b/reference/map/multimap/insert_range.md @@ -7,7 +7,9 @@ ```cpp template R> -void insert_range(R&& rg); // C++23 +void insert_range(R&& rg); // (1) C++23 +template R> +constexpr void insert_range(R&& rg); // (1) C++26 ``` ## 概要 @@ -76,3 +78,7 @@ C 12 | 名前 | 説明 | |------------------------------------------------|--------------------------------------------| | [`multimap::insert`](insert.md) | 要素を挿入する | + + +## 参照 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/map/multimap/key_comp.md b/reference/map/multimap/key_comp.md index eda97667ab..0bc86a3493 100644 --- a/reference/map/multimap/key_comp.md +++ b/reference/map/multimap/key_comp.md @@ -5,7 +5,8 @@ * function[meta id-type] ```cpp -key_compare key_comp() const; +key_compare key_comp() const; // (1) C++03 +constexpr key_compare key_comp() const; // (1) C++26 ``` ## 概要 @@ -60,3 +61,7 @@ int main() | [`count`](count.md) | 指定したキーにマッチする要素の数を返す | | [`lower_bound`](lower_bound.md) | 与えられた値より小さく無い最初の要素へのイテレータを返す | | [`upper_bound`](upper_bound.md) | 特定の値よりも大きい最初の要素へのイテレータを返す | + + +## 参照 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/map/multimap/lower_bound.md b/reference/map/multimap/lower_bound.md index 0c1c7352fe..0571b722d6 100644 --- a/reference/map/multimap/lower_bound.md +++ b/reference/map/multimap/lower_bound.md @@ -5,15 +5,21 @@ * function[meta id-type] ```cpp -iterator lower_bound(const key_type& x); // (1) +iterator lower_bound(const key_type& x); // (1) C++03 +constexpr iterator lower_bound(const key_type& x); // (1) C++26 template -iterator lower_bound(const K& x); // (2) C++14 +iterator lower_bound(const K& x); // (2) C++14 +template +constexpr iterator lower_bound(const K& x); // (2) C++26 -const_iterator lower_bound(const key_type& x) const; // (3) +const_iterator lower_bound(const key_type& x) const; // (3) C++03 +constexpr const_iterator lower_bound(const key_type& x) const; // (3) C++26 template -const_iterator lower_bound(const K& x) const; // (4) C++14 +const_iterator lower_bound(const K& x) const; // (4) C++14 +template +constexpr const_iterator lower_bound(const K& x) const; // (4) C++26 ``` ## 概要 @@ -121,3 +127,4 @@ D,5 ## 参照 - [N3657 Adding heterogeneous comparison lookup to associative containers (rev 4)](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2013/n3657.htm) +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/map/multimap/max_size.md b/reference/map/multimap/max_size.md index 29e1851169..8c10e11a11 100644 --- a/reference/map/multimap/max_size.md +++ b/reference/map/multimap/max_size.md @@ -5,8 +5,9 @@ * function[meta id-type] ```cpp -size_type max_size() const; // C++03 -size_type max_size() const noexcept; // C++11 +size_type max_size() const; // (1) C++03 +size_type max_size() const noexcept; // (1) C++11 +constexpr size_type max_size() const noexcept; // (1) C++26 ``` ## 概要 @@ -55,3 +56,7 @@ int main () | 名前 | 説明 | |-----------------------------------------------------------------------------------|--------------------------| | [`size`](size.md) | 要素数を取得する | + + +## 参照 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/map/multimap/merge.md b/reference/map/multimap/merge.md index e229e9eee7..15fd806aa1 100644 --- a/reference/map/multimap/merge.md +++ b/reference/map/multimap/merge.md @@ -7,13 +7,24 @@ ```cpp template - void merge(map& source); // (1) +void merge(map& source); // (1) C++17 template - void merge(map&& source); // (2) +constexpr void merge(map& source); // (1) C++26 + +template +void merge(map&& source); // (2) C++17 +template +constexpr void merge(map&& source); // (2) C++26 + +template +void merge(multimap& source); // (3) C++17 +template +constexpr void merge(multimap& source); // (3) C++26 + template - void merge(multimap& source); // (3) +void merge(multimap&& source); // (4) C++17 template - void merge(multimap&& source); // (4) +constexpr void merge(multimap&& source); // (4) C++26 ``` ## 概要 @@ -98,3 +109,4 @@ m2 : ## 参照 - [Splicing Maps and Sets(Revision 5)](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/p0083r3.pdf) +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/map/multimap/op_assign.md b/reference/map/multimap/op_assign.md index ef804fa1f9..0e9ffabd1d 100644 --- a/reference/map/multimap/op_assign.md +++ b/reference/map/multimap/op_assign.md @@ -5,12 +5,20 @@ * function[meta id-type] ```cpp -multimap& operator=(const multimap& x); // (1) C++03 -multimap& operator=(multimap&& x); // (2) C++11 +multimap& operator=(const multimap& x); // (1) C++03 +constexpr multimap& operator=(const multimap& x); // (1) C++26 + +multimap& operator=(multimap&& x); // (2) C++11 multimap& operator=(multimap&& x) noexcept(allocator_traits::is_always_equal::value - && is_nothrow_move_assignable::value) // (2) C++17 -multimap& operator=(initializer_list init); // (3) C++11 + && is_nothrow_move_assignable::value) // (2) C++17 +constexpr multimap& + operator=(multimap&& x) + noexcept(allocator_traits::is_always_equal::value + && is_nothrow_move_assignable::value) // (2) C++26 + +multimap& operator=(initializer_list init); // (3) C++11 +constexpr multimap& operator=(initializer_list init); // (3) C++26 ``` ## 概要 @@ -96,3 +104,4 @@ Size of m2: 6 - (3)の経緯となる提案文書 - [N4258 Cleaning-up noexcept in the Library, Rev 3](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n4258.pdf) - `noexcept` 追加の経緯となる提案文書 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/map/multimap/op_compare_3way.md b/reference/map/multimap/op_compare_3way.md index dc5ddc220e..5377baf6d3 100644 --- a/reference/map/multimap/op_compare_3way.md +++ b/reference/map/multimap/op_compare_3way.md @@ -10,6 +10,10 @@ namespace std { synth-three-way-result> operator<=>(const multimap& x, const multimap& y); // (1) C++20 + template + constexpr synth-three-way-result> + operator<=>(const multimap& x, + const multimap& y); // (1) C++26 } ``` @@ -83,3 +87,4 @@ int main() ## 参照 - [P1614R2 The Mothership has Landed](https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2019/p1614r2.html) - C++20での三方比較演算子の追加と、関連する演算子の自動導出 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/map/multimap/op_constructor.md b/reference/map/multimap/op_constructor.md index f34c413561..3b0f26e05f 100644 --- a/reference/map/multimap/op_constructor.md +++ b/reference/map/multimap/op_constructor.md @@ -5,56 +5,101 @@ * function[meta id-type] ```cpp -multimap(); // (1) C++14 から +multimap(); // (1) C++14 +constexpr multimap(); // (1) C++26 -explicit multimap(const Compare& comp, - const Allocator& alloc = Allocator()); // (2) C++14 まで +explicit + multimap(const Compare& comp, + const Allocator& alloc = Allocator()); // (2) C++14 +constexpr explicit + multimap(const Compare& comp, + const Allocator& alloc = Allocator()); // (2) C++26 explicit multimap(const Compare& comp = Compare(), const Allocator& alloc = Allocator()); // (1) + (2) C++11 まで -explicit multimap(const Allocator& alloc); // (3) C++11 から +explicit multimap(const Allocator& alloc); // (3) C++11 +constexpr explicit multimap(const Allocator& alloc); // (3) C++26 template multimap(InputIterator first, InputIterator last, const Compare& comp = Compare(), - const Allocator& alloc = Allocator()); // (4) + const Allocator& alloc = Allocator()); // (4) C++03 +template +constexpr + multimap(InputIterator first, + InputIterator last, + const Compare& comp = Compare(), + const Allocator& alloc = Allocator()); // (4) C++26 template multimap(InputIterator first, InputIterator last, - const Allocator& alloc); // (5) C++14 から + const Allocator& alloc); // (5) C++14 +template +constexpr + multimap(InputIterator first, + InputIterator last, + const Allocator& alloc); // (5) C++26 -multimap(const multimap& x); // (6) +multimap(const multimap& x); // (6) C++03 +constexpr multimap(const multimap& x); // (6) C++26 multimap(const multimap& x, - const Allocator& alloc); // (7) C++11 + const Allocator& alloc); // (7) C++11 multimap(const multimap& x, - const type_identity_t& alloc); // (7) C++23 + const type_identity_t& alloc); // (7) C++23 +constexpr + multimap(const multimap& x, + const type_identity_t& alloc); // (7) C++26 -multimap(multimap&& y); // (8) C++11 から +multimap(multimap&& y); // (8) C++11 +constexpr multimap(multimap&& y); // (8) C++26 multimap(multimap&& y, - const Allocator& alloc); // (9) C++11 + const Allocator& alloc); // (9) C++11 multimap(multimap&& y, - const type_identity_t& alloc); // (9) C++23 + const type_identity_t& alloc); // (9) C++23 +constexpr + multimap(multimap&& y, + const type_identity_t& alloc); // (9) C++26 multimap(initializer_list init, const Compare& comp = Compare(), - const Allocator& alloc = Allocator()); // (10) C++11 から + const Allocator& alloc = Allocator()); // (10) C++11 +constexpr + multimap(initializer_list init, + const Compare& comp = Compare(), + const Allocator& alloc = Allocator()); // (10) C++26 multimap(initializer_list init, - const Allocator& alloc); // (11) C++14 から + const Allocator& alloc); // (11) C++14 +constexpr + multimap(initializer_list init, + const Allocator& alloc); // (11) C++26 template R> -multimap(from_range_t, R&& rg, +multimap(from_range_t, + R&& rg, const Compare& comp = Compare(), - const Allocator& alloc = Allocator()); // (12) C++23 から + const Allocator& alloc = Allocator()); // (12) C++23 +template R> +constexpr + multimap(from_range_t, + R&& rg, + const Compare& comp = Compare(), + const Allocator& alloc = Allocator()); // (12) C++26 template R> -multimap(from_range_t, R&& rg, - const Allocator& alloc); // (13) C++23 から +multimap(from_range_t, + R&& rg, + const Allocator& alloc); // (13) C++23 +template R> +constexpr + multimap(from_range_t, + R&& rg, + const Allocator& alloc); // (13) C++26 ``` * type_identity_t[link /reference/type_traits/type_identity.md] * initializer_list[link ../../initializer_list.md] @@ -180,3 +225,4 @@ Size of m2: 3 なお、Discussion の例はアロケータの型が誤っているので注意 - [P1518R2 Stop Overconstraining Allocators in Container Deduction Guides](https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2021/p1518r2.html) - C++23でのアロケータ引数を`type_identity_t`で包む変更 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/map/multimap/op_destructor.md b/reference/map/multimap/op_destructor.md index 5d5d1e911e..79209f4d84 100644 --- a/reference/map/multimap/op_destructor.md +++ b/reference/map/multimap/op_destructor.md @@ -5,7 +5,8 @@ * function[meta id-type] ```cpp -~multimap(); +~multimap(); // (1) C++03 +constexpr ~multimap(); // (1) C++26 ``` ## 概要 @@ -14,3 +15,7 @@ ## 計算量 [`size()`](size.md) に対して線形時間(デストラクタ呼び出し) + + +## 参照 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/map/multimap/op_equal.md b/reference/map/multimap/op_equal.md index f8f925e41f..97d1500c3c 100644 --- a/reference/map/multimap/op_equal.md +++ b/reference/map/multimap/op_equal.md @@ -9,6 +9,10 @@ namespace std { bool operator==(const multimap& x, const multimap& y); // (1) C++03 + template + constexpr bool + operator==(const multimap& x, + const multimap& y); // (1) C++26 } ``` @@ -71,3 +75,4 @@ int main() - C++14から、2つ目のイテレータ範囲のendイテレータをとる`equal()`アルゴリズムを使用するようになった。 - [P1614R2 The Mothership has Landed](https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2019/p1614r2.html) - C++20での三方比較演算子の追加と、関連する演算子の自動導出 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/map/multimap/op_greater.md b/reference/map/multimap/op_greater.md index 2cb7f0affb..26ab76de32 100644 --- a/reference/map/multimap/op_greater.md +++ b/reference/map/multimap/op_greater.md @@ -10,6 +10,10 @@ namespace std { bool operator>(const multimap& x, const multimap& y); // (1) C++03 + template + constexpr bool + operator>(const multimap& x, + const multimap& y); // (1) C++26 } ``` @@ -71,3 +75,4 @@ int main() ## 参照 - [P1614R2 The Mothership has Landed](https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2019/p1614r2.html) - C++20での三方比較演算子の追加と、関連する演算子の自動導出 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/map/multimap/op_greater_equal.md b/reference/map/multimap/op_greater_equal.md index 14dfafbe9a..6011331187 100644 --- a/reference/map/multimap/op_greater_equal.md +++ b/reference/map/multimap/op_greater_equal.md @@ -10,6 +10,10 @@ namespace std { bool operator>=(const multimap& x, const multimap& y); // (1) C++03 + template + constexpr bool + operator>=(const multimap& x, + const multimap& y); // (1) C++26 } ``` @@ -64,3 +68,4 @@ int main() ## 参照 - [P1614R2 The Mothership has Landed](https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2019/p1614r2.html) - C++20での三方比較演算子の追加と、関連する演算子の自動導出 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/map/multimap/op_less.md b/reference/map/multimap/op_less.md index 62b80c81ba..585c114f67 100644 --- a/reference/map/multimap/op_less.md +++ b/reference/map/multimap/op_less.md @@ -10,6 +10,10 @@ namespace std { bool operator<(const multimap& x, const multimap& y); // (1) C++03 + template + constexpr bool + operator<(const multimap& x, + const multimap& y); // (1) C++26 } ``` @@ -75,3 +79,4 @@ int main() ## 参照 - [P1614R2 The Mothership has Landed](https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2019/p1614r2.html) - C++20での三方比較演算子の追加と、関連する演算子の自動導出 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/map/multimap/op_less_equal.md b/reference/map/multimap/op_less_equal.md index c3bfc02055..7aad0e15eb 100644 --- a/reference/map/multimap/op_less_equal.md +++ b/reference/map/multimap/op_less_equal.md @@ -10,6 +10,10 @@ namespace std { bool operator<=(const multimap& x, const multimap& y); // (1) C++03 + template + constexpr bool + operator<=(const multimap& x, + const multimap& y); // (1) C++26 } ``` @@ -64,3 +68,4 @@ int main() ## 参照 - [P1614R2 The Mothership has Landed](https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2019/p1614r2.html) - C++20での三方比較演算子の追加と、関連する演算子の自動導出 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/map/multimap/op_not_equal.md b/reference/map/multimap/op_not_equal.md index 06603a51bd..038e6fd7c4 100644 --- a/reference/map/multimap/op_not_equal.md +++ b/reference/map/multimap/op_not_equal.md @@ -10,6 +10,10 @@ namespace std { bool operator!=(const multimap& x, const multimap& y); // (1) C++03 + template + constexpr bool + operator!=(const multimap& x, + const multimap& y); // (1) C++26 } ``` @@ -69,3 +73,4 @@ int main() ## 参照 - [P1614R2 The Mothership has Landed](https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2019/p1614r2.html) - C++20での三方比較演算子の追加と、関連する演算子の自動導出 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/map/multimap/rbegin.md b/reference/map/multimap/rbegin.md index 8cbc8a1662..ff1d5cc272 100644 --- a/reference/map/multimap/rbegin.md +++ b/reference/map/multimap/rbegin.md @@ -5,11 +5,13 @@ * function[meta id-type] ```cpp -reverse_iterator rbegin(); // (1) C++03 -reverse_iterator rbegin() noexcept; // (1) C++11 +reverse_iterator rbegin(); // (1) C++03 +reverse_iterator rbegin() noexcept; // (1) C++11 +constexpr reverse_iterator rbegin() noexcept; // (1) C++26 -const_reverse_iterator rbegin() const; // (2) C++03 -const_reverse_iterator rbegin() const noexcept; // (2) C++11 +const_reverse_iterator rbegin() const; // (2) C++03 +const_reverse_iterator rbegin() const noexcept; // (2) C++11 +constexpr const_reverse_iterator rbegin() const noexcept; // (2) C++26 ``` ## 概要 @@ -78,3 +80,7 @@ int main() | [`multimap::rend`](rend.md) | 先頭の前を指す逆イテレータを取得する | | [`multimap::crbegin`](crbegin.md) | 末尾を指す逆constイテレータを取得する | | [`multimap::crend`](crend.md) | 先頭の前を指す逆constイテレータを取得する | + + +## 参照 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/map/multimap/rend.md b/reference/map/multimap/rend.md index aa1eb7c50a..aa06f4f32a 100644 --- a/reference/map/multimap/rend.md +++ b/reference/map/multimap/rend.md @@ -5,11 +5,13 @@ * function[meta id-type] ```cpp -reverse_iterator rend(); // (1) C++03 -reverse_iterator rend() noexcept; // (1) C++11 +reverse_iterator rend(); // (1) C++03 +reverse_iterator rend() noexcept; // (1) C++11 +constexpr reverse_iterator rend() noexcept; // (1) C++26 -const_reverse_iterator rend() const; // (2) C++03 -const_reverse_iterator rend() const noexcept; // (2) C++11 +const_reverse_iterator rend() const; // (2) C++03 +const_reverse_iterator rend() const noexcept; // (2) C++11 +constexpr const_reverse_iterator rend() const noexcept; // (2) C++26 ``` ## 概要 @@ -72,3 +74,7 @@ int main() | [`multimap::rbegin`](rbegin.md) | 末尾を指す逆イテレータを取得する | | [`multimap::crbegin`](crbegin.md) | 末尾を指す逆constイテレータを取得する | | [`multimap::crend`](crend.md) | 先頭の前を指す逆constイテレータを取得する | + + +## 参照 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/map/multimap/size.md b/reference/map/multimap/size.md index 3688eaf9cd..bfb9fee597 100644 --- a/reference/map/multimap/size.md +++ b/reference/map/multimap/size.md @@ -5,8 +5,9 @@ * function[meta id-type] ```cpp -size_type size() const; // C++03 -size_type size() const noexcept; // C++11 +size_type size() const; // (1) C++03 +size_type size() const noexcept; // (1) C++11 +constexpr size_type size() const noexcept; // (1) C++26 ``` ## 概要 @@ -69,3 +70,7 @@ int main () |-------------------------------------------------------------------------------------------|-----------------------------------------------------| | [`max_size`](max_size.md) | 格納可能な最大の要素数を取得する | | [`empty`](empty.md) | コンテナが空であるかどうかを調べる | + + +## 参照 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/map/multimap/swap.md b/reference/map/multimap/swap.md index c46cb7728b..df7863e8fa 100644 --- a/reference/map/multimap/swap.md +++ b/reference/map/multimap/swap.md @@ -5,10 +5,16 @@ * function[meta id-type] ```cpp -void swap(multimap& st); -void swap(multimap& x) - noexcept(allocator_traits::is_always_equal::value - && noexcept(swap(declval(),declval()))); // C++17 +void + swap(multimap& st); // (1) C++03 +void + swap(multimap& x) + noexcept(allocator_traits::is_always_equal::value + && noexcept(swap(declval(),declval()))); // (1) C++17 +constexpr void + swap(multimap& x) + noexcept(allocator_traits::is_always_equal::value + && noexcept(swap(declval(),declval()))); // (1) C++26 ``` ## 概要 @@ -80,3 +86,4 @@ m2 : {[10,a], [20,b], [30,c], } ## 参照 - [N4258 Cleaning-up noexcept in the Library, Rev 3](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n4258.pdf) - `noexcept` 追加の経緯となる提案文書 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/map/multimap/swap_free.md b/reference/map/multimap/swap_free.md index 3550b7f042..3d803225b9 100644 --- a/reference/map/multimap/swap_free.md +++ b/reference/map/multimap/swap_free.md @@ -6,13 +6,19 @@ ```cpp namespace std { template - void swap(multimap& x, - multimap& y); - + void + swap(multimap& x, + multimap& y); // (1) C++03 + template + void + swap(multimap& x, + multimap& y) + noexcept(noexcept(x.swap(y))); // (1) C++17 template - void swap(multimap& x, - multimap& y) - noexcept(noexcept(x.swap(y))); // C++17 + constexpr void + swap(multimap& x, + multimap& y) + noexcept(noexcept(x.swap(y))); // (1) C++26 } ``` @@ -89,3 +95,4 @@ m2 : {[10,a], [20,b], [30,c], } ## 参照 - [N4258 Cleaning-up noexcept in the Library, Rev 3](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n4258.pdf) - `noexcept` 追加の経緯となる提案文書 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/map/multimap/upper_bound.md b/reference/map/multimap/upper_bound.md index de9faf7498..daffa94905 100644 --- a/reference/map/multimap/upper_bound.md +++ b/reference/map/multimap/upper_bound.md @@ -5,15 +5,21 @@ * function[meta id-type] ```cpp -iterator upper_bound(const key_type& x); // (1) +iterator upper_bound(const key_type& x); // (1) C++03 +constexpr iterator upper_bound(const key_type& x); // (1) C++26 template -iterator upper_bound(const K& x); // (2) C++14 +iterator upper_bound(const K& x); // (2) C++14 +template +constexpr iterator upper_bound(const K& x); // (2) C++26 -const_iterator upper_bound(const key_type& x) const; // (3) +const_iterator upper_bound(const key_type& x) const; // (3) C++03 +constexpr const_iterator upper_bound(const key_type& x) const; // (3) C++26 template -const_iterator upper_bound(const K& x) const; // (4) C++14 +const_iterator upper_bound(const K& x) const; // (4) C++14 +template +constexpr const_iterator upper_bound(const K& x) const; // (4) C++26 ``` ## 概要 @@ -121,3 +127,4 @@ D,5 ## 参照 - [N3657 Adding heterogeneous comparison lookup to associative containers (rev 4)](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2013/n3657.htm) +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/map/multimap/value_comp.md b/reference/map/multimap/value_comp.md index 2e774950eb..73e5d81e00 100644 --- a/reference/map/multimap/value_comp.md +++ b/reference/map/multimap/value_comp.md @@ -5,7 +5,8 @@ * function[meta id-type] ```cpp -value_compare value_comp() const; +value_compare value_comp() const; // (1) C++03 +constexpr value_compare value_comp() const; // (1) C++26 ``` ## 概要 @@ -66,3 +67,7 @@ int main() | [`count`](count.md) | 指定したキーにマッチする要素の数を返す | | [`lower_bound`](lower_bound.md) | 与えられた値より小さくない最初の要素へのイテレータを返す | | [`upper_bound`](upper_bound.md) | 特定の値よりも大きい最初の要素へのイテレータを返す | + + +## 参照 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/node_handle/node_handle/empty.md b/reference/node_handle/node_handle/empty.md index e544cb4dcb..deca155fc9 100644 --- a/reference/node_handle/node_handle/empty.md +++ b/reference/node_handle/node_handle/empty.md @@ -6,9 +6,9 @@ * [meta namespace] ```cpp -bool empty() const noexcept; -[[nodiscard]] bool empty() const noexcept; // C++20 -bool empty() const noexcept; // C++26 +bool empty() const noexcept; // (1) C++17 +[[nodiscard]] bool empty() const noexcept; // (1) C++20 +constexpr bool empty() const noexcept; // (1) C++26 ``` ## 概要 @@ -50,3 +50,4 @@ true - C++20で`[[nodiscard]]`が付加された - [P2422R1 Remove `nodiscard` annotations from the standard library specification](https://open-std.org/jtc1/sc22/wg21/docs/papers/2024/p2422r1.html) - C++26で`[[nodiscard]]`指定が削除された +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/node_handle/node_handle/get_allocator.md b/reference/node_handle/node_handle/get_allocator.md index d860f39f24..b775c44b4d 100644 --- a/reference/node_handle/node_handle/get_allocator.md +++ b/reference/node_handle/node_handle/get_allocator.md @@ -6,7 +6,8 @@ * [meta namespace] ```cpp -allocator_type get_allocator() const; +allocator_type get_allocator() const; // (1) C++17 +constexpr allocator_type get_allocator() const; // (1) C++26 ``` ## 概要 @@ -56,3 +57,4 @@ int main() ## 参照 - [Splicing Maps and Sets(Revision 5)](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/p0083r3.pdf) +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/node_handle/node_handle/mapped.md b/reference/node_handle/node_handle/mapped.md index c5909723e2..9204127967 100644 --- a/reference/node_handle/node_handle/mapped.md +++ b/reference/node_handle/node_handle/mapped.md @@ -6,7 +6,8 @@ * [meta namespace] ```cpp -mapped_type& mapped() const; // set コンテナには存在ない +mapped_type& mapped() const; // (1) C++17 : set コンテナには存在ない +constexpr mapped_type& mapped() const; // (1) C++26 : set コンテナには存在ない ``` ## 概要 @@ -64,3 +65,4 @@ nya ## 参照 - [Splicing Maps and Sets(Revision 5)](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/p0083r3.pdf) +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/node_handle/node_handle/op_assign.md b/reference/node_handle/node_handle/op_assign.md index efa67a46f9..8d768d4402 100644 --- a/reference/node_handle/node_handle/op_assign.md +++ b/reference/node_handle/node_handle/op_assign.md @@ -6,7 +6,8 @@ * [meta namespace] ```cpp -node_handle& operator=(node_handle&& nh); +node_handle& operator=(node_handle&& nh); // (1) C++17 +constexpr node_handle& operator=(node_handle&& nh); // (1) C++26 ``` ## 概要 @@ -68,3 +69,4 @@ int main() ## 参照 - [Splicing Maps and Sets(Revision 5)](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/p0083r3.pdf) +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/node_handle/node_handle/op_bool.md b/reference/node_handle/node_handle/op_bool.md index d5b3ef3e35..d0777aff03 100644 --- a/reference/node_handle/node_handle/op_bool.md +++ b/reference/node_handle/node_handle/op_bool.md @@ -6,7 +6,8 @@ * [meta namespace] ```cpp -explicit operator bool() const noexcept; +explicit operator bool() const noexcept; // (1) C++17 +constexpr explicit operator bool() const noexcept; // (1) C++26 ``` ## 概要 @@ -47,3 +48,4 @@ false ## 参照 - [Splicing Maps and Sets(Revision 5)](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/p0083r3.pdf) +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/node_handle/node_handle/op_constructor.md b/reference/node_handle/node_handle/op_constructor.md index 46562e8055..45194fa363 100644 --- a/reference/node_handle/node_handle/op_constructor.md +++ b/reference/node_handle/node_handle/op_constructor.md @@ -6,8 +6,11 @@ * [meta namespace] ```cpp -constexpr node_handle() noexcept : ptr_(), alloc_() {} // (1) -node_handle(node_handle&& nh) noexcept; // (2) +node_handle() noexcept : ptr_(), alloc_() {} // (1) C++17 +constexpr node_handle() noexcept : ptr_(), alloc_() {} // (1) C++26 + +node_handle(node_handle&& nh) noexcept; // (2) C++17 +constexpr node_handle(node_handle&& nh) noexcept; // (2) C++26 ``` ## 概要 @@ -57,3 +60,4 @@ int main() ## 参照 - [Splicing Maps and Sets(Revision 5)](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/p0083r3.pdf) +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/node_handle/node_handle/op_destructor.md b/reference/node_handle/node_handle/op_destructor.md index 3db26cae4b..6da11e0577 100644 --- a/reference/node_handle/node_handle/op_destructor.md +++ b/reference/node_handle/node_handle/op_destructor.md @@ -6,7 +6,8 @@ * [meta namespace] ```cpp -~node_handle(); +~node_handle(); // (1) C++17 +constexpr ~node_handle(); // (1) C++26 ``` ## 概要 @@ -48,3 +49,4 @@ int main() ## 参照 - [Splicing Maps and Sets(Revision 5)](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/p0083r3.pdf) +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/node_handle/node_handle/swap.md b/reference/node_handle/node_handle/swap.md index a2ba4f1dcd..8d1d2a3a5a 100644 --- a/reference/node_handle/node_handle/swap.md +++ b/reference/node_handle/node_handle/swap.md @@ -6,9 +6,14 @@ * [meta namespace] ```cpp -void swap(node_handle&) +void + swap(node_handle&) noexcept(ator_traits::propagate_on_container_swap::value || - ator_traits::is_always_equal::value); + ator_traits::is_always_equal::value); // (1) C++17 +constexpr void + swap(node_handle&) + noexcept(ator_traits::propagate_on_container_swap::value || + ator_traits::is_always_equal::value); // (1) C++26 ``` ## 概要 @@ -92,3 +97,4 @@ node2 : [10, a] ## 参照 - [Splicing Maps and Sets(Revision 5)](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/p0083r3.pdf) +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/node_handle/node_handle/swap_free.md b/reference/node_handle/node_handle/swap_free.md index 919a7f31a3..40638e52f8 100644 --- a/reference/node_handle/node_handle/swap_free.md +++ b/reference/node_handle/node_handle/swap_free.md @@ -5,7 +5,12 @@ * [meta namespace] ```cpp -friend void swap(node_handle& x, node_handle& y) noexcept(noexcept(x.swap(y))); +friend void + swap(node_handle& x, node_handle& y) + noexcept(noexcept(x.swap(y))); // (1) C++17 +constexpr friend void + swap(node_handle& x, node_handle& y) + noexcept(noexcept(x.swap(y))); // (1) C++26 ``` ## 概要 @@ -80,3 +85,4 @@ node2 : [10, a] ## 参照 - [Splicing Maps and Sets(Revision 5)](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/p0083r3.pdf) +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/node_handle/node_handle/value.md b/reference/node_handle/node_handle/value.md index 455d15d147..3b9f389b82 100644 --- a/reference/node_handle/node_handle/value.md +++ b/reference/node_handle/node_handle/value.md @@ -6,7 +6,8 @@ * [meta namespace] ```cpp -value_type& value() const; // map コンテナには存在ない +value_type& value() const; // (1) C++17 : map コンテナには存在ない +constexpr value_type& value() const; // (1) C++26 : map コンテナには存在ない ``` ## 概要 @@ -58,3 +59,4 @@ int main() ## 参照 - [Splicing Maps and Sets(Revision 5)](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/p0083r3.pdf) +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/queue/priority_queue/emplace.md b/reference/queue/priority_queue/emplace.md index 0d9f8ce271..f2a93f99f5 100644 --- a/reference/queue/priority_queue/emplace.md +++ b/reference/queue/priority_queue/emplace.md @@ -7,7 +7,9 @@ ```cpp template -void emplace(Args&&... args); +void emplace(Args&&... args); // (1) C++11 +template +constexpr void emplace(Args&&... args); // (1) C++26 ``` ## 概要 @@ -73,3 +75,4 @@ int main () ## 参照 - [N2680 Proposed Wording for Placement Insert (Revision 1)](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2680.pdf) +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/queue/priority_queue/empty.md b/reference/queue/priority_queue/empty.md index 267d9a5a5c..86a5e1c4aa 100644 --- a/reference/queue/priority_queue/empty.md +++ b/reference/queue/priority_queue/empty.md @@ -5,9 +5,9 @@ * function[meta id-type] ```cpp -bool empty() const; // C++03 -[[nodiscard]] bool empty() const; // C++20 -bool empty() const; // C++26 +bool empty() const; // (1) C++03 +[[nodiscard]] bool empty() const; // (1) C++20 +constexpr bool empty() const; // (1) C++26 ``` ## 概要 @@ -71,3 +71,4 @@ non_empty_que is not empty - C++20で`[[nodiscard]]`が付加された - [P2422R1 Remove `nodiscard` annotations from the standard library specification](https://open-std.org/jtc1/sc22/wg21/docs/papers/2024/p2422r1.html) - C++26で`[[nodiscard]]`指定が削除された +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/queue/priority_queue/op_constructor.md b/reference/queue/priority_queue/op_constructor.md index ef3ff162e8..62c1ae5841 100644 --- a/reference/queue/priority_queue/op_constructor.md +++ b/reference/queue/priority_queue/op_constructor.md @@ -5,93 +5,182 @@ * function[meta id-type] ```cpp -explicit priority_queue( - const Compare& x = Compare(), - const Container& other = Container()); // (1) C++03 - -explicit priority_queue(const Compare& x = Compare(), - Container&& y = Container()); // (1) C++11 - -priority_queue() : priority_queue(Compare()) {} // (1) C++20 - -explicit priority_queue(const Compare& x) - : priority_queue(x, Container()) {} // (2) C++20 - -priority_queue(const Compare& x, const Container& other); // (3) C++11 - -priority_queue(const priority_queue&); // (4) C++03 -priority_queue(const priority_queue&) = default; // (4) C++11 +explicit + priority_queue(const Compare& x = Compare(), + const Container& other = Container()); // (1) C++03 +explicit + priority_queue(const Compare& x = Compare(), + Container&& y = Container()); // (1) C++11 +priority_queue() + : priority_queue(Compare()) {} // (1) C++20 +constexpr + priority_queue() + : priority_queue(Compare()) {} // (1) C++26 + +explicit + priority_queue(const Compare& x) + : priority_queue(x, Container()) {} // (2) C++20 +constexpr explicit + priority_queue(const Compare& x) + : priority_queue(x, Container()) {} // (2) C++26 + +priority_queue(const Compare& x, const Container& other); // (3) C++11 +constexpr priority_queue(const Compare& x, const Container& other); // (3) C++26 + +priority_queue(const priority_queue&); // (4) C++03 +priority_queue(const priority_queue&) = default; // (4) C++11 +constexpr priority_queue(const priority_queue&) = default; // (4) C++26 template -priority_queue(InputIterator first, InputIterator last, +priority_queue(InputIterator first, + InputIterator last, const Compare& x = Compare(), - const Container& other = Container()); // (5) C++03 + const Container& other = Container()); // (5) C++03 +template +constexpr + priority_queue(InputIterator first, + InputIterator last, + const Compare& x = Compare(), + const Container& other = Container()); // (5) C++26 template -priority_queue(InputIterator first, InputIterator last, +priority_queue(InputIterator first, + InputIterator last, const Compare& x, - const Container& other); // (6) C++11 + const Container& other); // (6) C++11 +template +constexpr + priority_queue(InputIterator first, + InputIterator last, + const Compare& x, + const Container& other); // (6) C++26 template -priority_queue(InputIterator first, InputIterator last, +priority_queue(InputIterator first, + InputIterator last, const Compare& x = Compare(), - Container&& other = Container()); // (7) C++11 + Container&& other = Container()); // (7) C++11 +template +constexpr + priority_queue(InputIterator first, + InputIterator last, + const Compare& x = Compare(), + Container&& other = Container()); // (7) C++26 -priority_queue(priority_queue&&) = default; // (8) C++11 +priority_queue(priority_queue&&) = default; // (8) C++11 +constexpr priority_queue(priority_queue&&) = default; // (8) C++26 template -explicit priority_queue(const Alloc& alloc); // (9) C++11 +explicit priority_queue(const Alloc& alloc); // (9) C++11 +template +constexpr explicit priority_queue(const Alloc& alloc); // (9) C++26 template -priority_queue(const Compare& x, const Alloc& alloc); // (10) C++11 +priority_queue(const Compare& x, const Alloc& alloc); // (10) C++11 +template +constexpr priority_queue(const Compare& x, const Alloc& alloc); // (10) C++26 template priority_queue(const Compare& x, const Container& other, - const Alloc& alloc); // (11) C++11 + const Alloc& alloc); // (11) C++11 +template +constexpr + priority_queue(const Compare& x, + const Container& other, + const Alloc& alloc); // (11) C++26 template priority_queue(const Compare x&, Container&& other, - const Alloc& alloc); // (12) C++11 + const Alloc& alloc); // (12) C++11 +template +constexpr + priority_queue(const Compare x&, + Container&& other, + const Alloc& alloc); // (12) C++26 template priority_queue(const priority_queue& que, - const Alloc& alloc); // (13) C++11 + const Alloc& alloc); // (13) C++11 +template +constexpr + priority_queue(const priority_queue& que, + const Alloc& alloc); // (13) C++26 template priority_queue(priority_queue&& que, - const Alloc& alloc); // (14) C++11 + const Alloc& alloc); // (14) C++11 +template +constexpr + priority_queue(priority_queue&& que, + const Alloc& alloc); // (14) C++26 template -priority_queue(InputIterator first, InputIterator last, +priority_queue(InputIterator first, + InputIterator last, const Compare& x, - const Alloc& alloc); // (15) C++23 + const Alloc& alloc); // (15) C++23 +template +constexpr + priority_queue(InputIterator first, + InputIterator last, + const Compare& x, + const Alloc& alloc); // (15) C++26 template -priority_queue(InputIterator first, InputIterator last, +priority_queue(InputIterator first, + InputIterator last, const Compare& x, const Container& other, - const Alloc& alloc); // (16) C++23 + const Alloc& alloc); // (16) C++23 +template +constexpr + priority_queue(InputIterator first, + InputIterator last, + const Compare& x, + const Container& other, + const Alloc& alloc); // (16) C++26 template -priority_queue(InputIterator first, InputIterator last, +priority_queue(InputIterator first, + InputIterator last, const Compare& x, Container&& other, - const Alloc& alloc); // (17) C++23 + const Alloc& alloc); // (17) C++23 +template +constexpr + priority_queue(InputIterator first, + InputIterator last, + const Compare& x, + Container&& other, + const Alloc& alloc); // (17) C++26 template R> priority_queue(from_range_t, R&& rg, - const Compare& x = Compare()); // (18) C++23 + const Compare& x = Compare()); // (18) C++23 +template R> +constexpr + priority_queue(from_range_t, R&& rg, + const Compare& x = Compare()); // (18) C++26 template R, class Alloc> priority_queue(from_range_t, R&& rg, const Compare& x, - const Alloc& alloc); // (19) C++23 + const Alloc& alloc); // (19) C++23 +template R, class Alloc> +constexpr + priority_queue(from_range_t, R&& rg, + const Compare& x, + const Alloc& alloc); // (19) C++26 template R, class Alloc> priority_queue(from_range_t, R&& rg, - const Alloc& alloc); // (20) C++23 + const Alloc& alloc); // (20) C++23 +template R, class Alloc> +constexpr + priority_queue(from_range_t, R&& rg, + const Alloc& alloc); // (20) C++26 ``` * from_range_t[link ../../ranges/from_range_t.md] @@ -273,3 +362,4 @@ que5 : 5 4 3 2 1 ## 参照 - [P0935R0 Eradicating unnecessarily explicit default constructors from the standard library](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2018/p0935r0.html) +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/queue/priority_queue/pop.md b/reference/queue/priority_queue/pop.md index 5312921514..537bff6aff 100644 --- a/reference/queue/priority_queue/pop.md +++ b/reference/queue/priority_queue/pop.md @@ -5,7 +5,8 @@ * function[meta id-type] ```cpp -void pop(); +void pop(); // (1) C++03 +constexpr void pop(); // (1) C++26 ``` ## 概要 @@ -55,3 +56,4 @@ int main() ``` ## 参照 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/queue/priority_queue/push.md b/reference/queue/priority_queue/push.md index 22d1218015..1f9bd3c58e 100644 --- a/reference/queue/priority_queue/push.md +++ b/reference/queue/priority_queue/push.md @@ -5,8 +5,11 @@ * function[meta id-type] ```cpp -void push(const value_type& x); // (1) -void push(value_type&& x); // (2) C++11 +void push(const value_type& x); // (1) C++03 +constexpr void push(const value_type& x); // (1) C++26 + +void push(value_type&& x); // (2) C++11 +constexpr void push(value_type&& x); // (2) C++26 ``` ## 概要 @@ -76,3 +79,4 @@ int main() ## 参照 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/queue/priority_queue/push_range.md b/reference/queue/priority_queue/push_range.md index 82e1291b95..e8f6b9ac0a 100644 --- a/reference/queue/priority_queue/push_range.md +++ b/reference/queue/priority_queue/push_range.md @@ -7,7 +7,9 @@ ```cpp template R> -void push_range(R&& rg); // C++23 +void push_range(R&& rg); // (1) C++23 +template R> +constexpr void push_range(R&& rg); // (1) C++26 ``` ## 概要 @@ -61,3 +63,7 @@ int main() | 名前 | 説明 | |-------------------|----------------| | [`push`](push.md) | 要素を追加する | + + +## 参照 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/queue/priority_queue/size.md b/reference/queue/priority_queue/size.md index 08f8d1a8fe..0f56745d6b 100644 --- a/reference/queue/priority_queue/size.md +++ b/reference/queue/priority_queue/size.md @@ -5,7 +5,8 @@ * function[meta id-type] ```cpp -size_type size() const; +size_type size() const; // (1) C++03 +constexpr size_type size() const; // (1) C++26 ``` ## 概要 @@ -50,3 +51,4 @@ int main() ``` ## 参照 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/queue/priority_queue/swap.md b/reference/queue/priority_queue/swap.md index 35f15b3d96..6d2b0279b3 100644 --- a/reference/queue/priority_queue/swap.md +++ b/reference/queue/priority_queue/swap.md @@ -7,7 +7,9 @@ ```cpp void swap(priority_queue& q) - noexcept(noexcept(swap(c, q.c)) && noexcept(swap(comp, q.comp))) + noexcept(noexcept(swap(c, q.c)) && noexcept(swap(comp, q.comp))); // (1) C++11 +constexpr void swap(priority_queue& q) + noexcept(noexcept(swap(c, q.c)) && noexcept(swap(comp, q.comp))); // (1) C++26 ``` ## 概要 @@ -87,3 +89,4 @@ int main () ## 参照 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/queue/priority_queue/swap_free.md b/reference/queue/priority_queue/swap_free.md index 1bc31e0026..d45fa885cf 100644 --- a/reference/queue/priority_queue/swap_free.md +++ b/reference/queue/priority_queue/swap_free.md @@ -7,8 +7,15 @@ ```cpp namespace std { template - void swap(priority_queue& x, - priority_queue& y) noexcept(noexcept(x.swap(y))); + void + swap(priority_queue& x, + priority_queue& y) + noexcept(noexcept(x.swap(y))); // (1) C++11 + template + constexpr void + swap(priority_queue& x, + priority_queue& y) + noexcept(noexcept(x.swap(y))); // (1) C++26 } ``` * swap[link /reference/queue/priority_queue/swap.md] @@ -86,3 +93,4 @@ int main() ## 参照 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/queue/priority_queue/top.md b/reference/queue/priority_queue/top.md index 99790ffd6d..2ebfcd5f12 100644 --- a/reference/queue/priority_queue/top.md +++ b/reference/queue/priority_queue/top.md @@ -5,7 +5,8 @@ * function[meta id-type] ```cpp -const_reference top() const; +const_reference top() const; // (1) C++03 +constexpr const_reference top() const; // (1) C++26 ``` ## 概要 @@ -53,3 +54,7 @@ int main() 3 1 ``` + + +## 参照 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/queue/queue/back.md b/reference/queue/queue/back.md index 9315fb3106..b0aba97bbe 100644 --- a/reference/queue/queue/back.md +++ b/reference/queue/queue/back.md @@ -5,8 +5,11 @@ * function[meta id-type] ```cpp -value_type& back(); -const value_type& back() const; +value_type& back(); // (1) C++03 +constexpr value_type& back(); // (1) C++26 + +const value_type& back() const; // (2) C++03 +constexpr const value_type& back() const; // (2) C++26 ``` ## 概要 @@ -58,3 +61,7 @@ int main() { value_type& back() { return c.back(); } const value_type& back() const { return c.back(); } ``` + + +## 参照 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/queue/queue/emplace.md b/reference/queue/queue/emplace.md index dca91c0adc..278ee81dae 100644 --- a/reference/queue/queue/emplace.md +++ b/reference/queue/queue/emplace.md @@ -7,10 +7,11 @@ ```cpp template -void emplace(Args&&... args); // C++14 まで - +void emplace(Args&&... args); // (1) C++11 +template +decltype(auto) emplace(Args&&... args); // (1) C++17 template -decltype(auto) emplace(Args&&... args); // C++17 から +constexpr decltype(auto) emplace(Args&&... args); // (1) C++26 ``` ## 概要 @@ -95,3 +96,4 @@ C++17 規格が発行された段階では戻り値型が `reference` に変更 - [P0084R1 Emplace Return Type (Revision 1)](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/p0084r1.pdf) - [P0084R2 Emplace Return Type (Revision 2)](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/p0084r2.pdf) - [LWG Issue 2783. stack::emplace() and queue::emplace() should return decltype(auto)](https://wg21.cmeerw.net/lwg/issue2783) +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/queue/queue/empty.md b/reference/queue/queue/empty.md index 90681fd848..99f40da9ec 100644 --- a/reference/queue/queue/empty.md +++ b/reference/queue/queue/empty.md @@ -5,9 +5,9 @@ * function[meta id-type] ```cpp -bool empty() const; // C++03 -[[nodiscard]] bool empty() const; // C++20 -bool empty() const; // C++26 +bool empty() const; // (1) C++03 +[[nodiscard]] bool empty() const; // (1) C++20 +constexpr bool empty() const; // (1) C++26 ``` ## 概要 @@ -57,3 +57,4 @@ empty - C++20で`[[nodiscard]]`が付加された - [P2422R1 Remove `nodiscard` annotations from the standard library specification](https://open-std.org/jtc1/sc22/wg21/docs/papers/2024/p2422r1.html) - C++26で`[[nodiscard]]`指定が削除された +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/queue/queue/front.md b/reference/queue/queue/front.md index fa6f83769f..4d1a8be3e1 100644 --- a/reference/queue/queue/front.md +++ b/reference/queue/queue/front.md @@ -5,8 +5,11 @@ * function[meta id-type] ```cpp -value_type& front(); -const value_type& front() const; +value_type& front(); // (1) C++03 +constexpr value_type& front(); // (1) C++26 + +const value_type& front() const; // (2) C++03 +constexpr const value_type& front() const; // (2) C++26 ``` ## 概要 @@ -65,3 +68,4 @@ const value_type& front() const { return c.front(); } ``` ## 参照 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/queue/queue/op_compare_3way.md b/reference/queue/queue/op_compare_3way.md index 451160c784..16fb49f83d 100644 --- a/reference/queue/queue/op_compare_3way.md +++ b/reference/queue/queue/op_compare_3way.md @@ -10,6 +10,10 @@ namespace std { compare_three_way_result_t operator<=>(const queue& x, const queue& y); // (1) C++20 + template + constexpr compare_three_way_result_t + operator<=>(const queue& x, + const queue& y); // (1) C++26 } ``` @@ -62,3 +66,4 @@ int main () ## 参照 - [P1614R2 The Mothership has Landed](https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2019/p1614r2.html) - C++20での三方比較演算子の追加と、関連する演算子の自動導出 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/queue/queue/op_constructor.md b/reference/queue/queue/op_constructor.md index 4596320db1..0bd75e6682 100644 --- a/reference/queue/queue/op_constructor.md +++ b/reference/queue/queue/op_constructor.md @@ -6,38 +6,66 @@ ```cpp // C++03まで -explicit queue(const Container& other = Container()); // (1), (2) +explicit queue(const Container& other = Container()); // (1), (2) C++03 // C++11以降 C++17まで -explicit queue(const Container& other); // (2) -explicit queue(Container&& other = Container()); // (1), (3) +explicit queue(const Container& other); // (2) C++11 +explicit queue(Container&& other = Container()); // (1), (3) C++11 // C++20以降 -queue() : queue(Container()) {} // (1) -explicit queue(const Container& other); // (2) -explicit queue(Container&& other); // (3) +queue() : queue(Container()) {} // (1) C++20 +constexpr queue() : queue(Container()) {} // (1) C++26 + +explicit queue(const Container& other); // (2) C++11 +constexpr explicit queue(const Container& other); // (2) C++26 + +explicit queue(Container&& other); // (3) C++20 +constexpr explicit queue(Container&& other); // (3) C++26 template -queue(InputIterator first, InputIterator last); // (4) C++23 +queue(InputIterator first, InputIterator last); // (4) C++23 +template +constexpr queue(InputIterator first, InputIterator last); // (4) C++26 + +template +explicit queue(const Alloc& alloc); // (5) C++11 +template +constexpr explicit queue(const Alloc& alloc); // (5) C++26 + +template +queue(const Container& other, const Alloc& alloc); // (6) C++11 +template +constexpr queue(const Container& other, const Alloc& alloc); // (6) C++26 template -explicit queue(const Alloc& alloc); // (5) C++11 +queue(Container&& other, const Alloc& alloc); // (7) C++11 +template +constexpr queue(Container&& other, const Alloc& alloc); // (7) C++26 + template -queue(const Container& other, const Alloc& alloc); // (6) C++11 +queue(const queue& que, const Alloc& alloc); // (8) C++11 template -queue(Container&& other, const Alloc& alloc); // (7) C++11 +constexpr queue(const queue& que, const Alloc& alloc); // (8) C++26 + template -queue(const queue& que, const Alloc& alloc); // (8) C++11 +queue(queue&& que, const Alloc& alloc); // (9) C++11 template -queue(queue&& que, const Alloc& alloc); // (9) C++11 +constexpr queue(queue&& que, const Alloc& alloc); // (9) C++26 template -queue(InputIterator first, InputIterator last, const Alloc&); // (10) C++23 +queue(InputIterator first, InputIterator last, const Alloc&); // (10) C++23 +template +constexpr queue(InputIterator first, InputIterator last, const Alloc&); // (10) C++26 template R> -queue(from_range_t, R&& rg); // (11) C++23 +queue(from_range_t, R&& rg); // (11) C++23 +template R> +constexpr queue(from_range_t, R&& rg); // (11) C++26 + +template R, class Alloc> +queue(from_range_t, R&& rg, const Alloc& alloc); // (12) C++23 template R, class Alloc> -queue(from_range_t, R&& rg, const Alloc& alloc); // (12) C++23 +constexpr queue(from_range_t, R&& rg, const Alloc& alloc); // (12) C++26 ``` * from_range_t[link ../../ranges/from_range_t.md] @@ -101,3 +129,4 @@ int main() { - C++20でのデフォルトコンストラクタの分離 - [P1425R4 Iterators pair constructors for stack and queue](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2021/p1425r4.pdf) - C++23でのイテレータペアへの対応 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/queue/queue/op_equal.md b/reference/queue/queue/op_equal.md index 2056579194..072c93c4e3 100644 --- a/reference/queue/queue/op_equal.md +++ b/reference/queue/queue/op_equal.md @@ -6,7 +6,9 @@ ```cpp namespace std { template - bool operator==(const queue& x, const queue& y); + bool operator==(const queue& x, const queue& y); // (1) C++03 + template + constexpr bool operator==(const queue& x, const queue& y); // (1) C++26 } ``` @@ -49,3 +51,4 @@ true ``` ## 参照 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/queue/queue/op_greater.md b/reference/queue/queue/op_greater.md index cf0cd1466e..4b704ec338 100644 --- a/reference/queue/queue/op_greater.md +++ b/reference/queue/queue/op_greater.md @@ -6,7 +6,9 @@ ```cpp namespace std { template - bool operator>(const queue& x, const queue& y); + bool operator>(const queue& x, const queue& y); // (1) C++03 + template + constexpr bool operator>(const queue& x, const queue& y); // (1) C++26 } ``` @@ -49,3 +51,4 @@ true ``` ## 参照 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/queue/queue/op_greater_equal.md b/reference/queue/queue/op_greater_equal.md index a5a2a50fd5..c35cf8f6ae 100644 --- a/reference/queue/queue/op_greater_equal.md +++ b/reference/queue/queue/op_greater_equal.md @@ -6,7 +6,9 @@ ```cpp namespace std { template - bool operator>=(const queue& x, const queue& y); + bool operator>=(const queue& x, const queue& y); // (1) C++03 + template + constexpr bool operator>=(const queue& x, const queue& y); // (1) C++26 } ``` @@ -49,3 +51,4 @@ true ``` ## 参照 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/queue/queue/op_less.md b/reference/queue/queue/op_less.md index 522d326142..d39bdc132e 100644 --- a/reference/queue/queue/op_less.md +++ b/reference/queue/queue/op_less.md @@ -6,7 +6,9 @@ ```cpp namespace std { template - bool operator<(const queue& x, const queue& y); + bool operator<(const queue& x, const queue& y); // (1) C++03 + template + constexpr bool operator<(const queue& x, const queue& y); // (1) C++26 } ``` @@ -49,3 +51,4 @@ true ``` ## 参照 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/queue/queue/op_less_equal.md b/reference/queue/queue/op_less_equal.md index 54511ec113..6312605206 100644 --- a/reference/queue/queue/op_less_equal.md +++ b/reference/queue/queue/op_less_equal.md @@ -6,7 +6,9 @@ ```cpp namespace std { template - bool operator<=(const queue& x, const queue& y); + bool operator<=(const queue& x, const queue& y); // (1) C++03 + template + constexpr bool operator<=(const queue& x, const queue& y); // (1) C++26 } ``` @@ -49,3 +51,4 @@ true ``` ## 参照 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/queue/queue/op_not_equal.md b/reference/queue/queue/op_not_equal.md index 09a27c8631..8427a9825d 100644 --- a/reference/queue/queue/op_not_equal.md +++ b/reference/queue/queue/op_not_equal.md @@ -6,7 +6,9 @@ ```cpp namespace std { template - bool operator!=(const queue& x, const queue& y); + bool operator!=(const queue& x, const queue& y); // (1) C++03 + template + constexpr bool operator!=(const queue& x, const queue& y); // (1) C++26 } ``` @@ -55,3 +57,4 @@ true ``` ## 参照 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/queue/queue/pop.md b/reference/queue/queue/pop.md index e05e95d995..7ca1e8efaa 100644 --- a/reference/queue/queue/pop.md +++ b/reference/queue/queue/pop.md @@ -5,7 +5,8 @@ * function[meta id-type] ```cpp -void pop(); +void pop(); // (1) C++03 +constexpr void pop(); // (1) C++26 ``` ## 概要 @@ -54,3 +55,4 @@ void pop() { c.pop_front(); } ``` ## 参照 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/queue/queue/push.md b/reference/queue/queue/push.md index 87028e3be5..4dc3dcd087 100644 --- a/reference/queue/queue/push.md +++ b/reference/queue/queue/push.md @@ -5,8 +5,11 @@ * function[meta id-type] ```cpp -void push(const value_type& x); // (1) -void push(value_type&& x); // (2) C++11から +void push(const value_type& x); // (1) C++03 +constexpr void push(const value_type& x); // (1) C++26 + +void push(value_type&& x); // (2) C++11 +constexpr void push(value_type&& x); // (2) C++26 ``` ## 概要 @@ -60,3 +63,4 @@ int main() ``` ## 参照 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/queue/queue/push_range.md b/reference/queue/queue/push_range.md index af2f2c29b2..1bdb07a573 100644 --- a/reference/queue/queue/push_range.md +++ b/reference/queue/queue/push_range.md @@ -7,7 +7,9 @@ ```cpp template R> -void push_range(R&& rg); // C++23 +void push_range(R&& rg); // (1) C++23 +template R> +constexpr void push_range(R&& rg); // (1) C++26 ``` ## 概要 @@ -63,3 +65,7 @@ int main() | 名前 | 説明 | |-------------------|----------------| | [`push`](push.md) | 要素を追加する | + + +## 参照 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/queue/queue/size.md b/reference/queue/queue/size.md index 186894c5d4..e458b08a3d 100644 --- a/reference/queue/queue/size.md +++ b/reference/queue/queue/size.md @@ -5,7 +5,8 @@ * function[meta id-type] ```cpp -size_type size() const; +size_type size() const; // (1) C++03 +constexpr size_type size() const; // (1) C++26 ``` ## 概要 @@ -59,3 +60,4 @@ int main() { ``` ## 参照 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/queue/queue/swap.md b/reference/queue/queue/swap.md index 0043f2af26..5c8db742ab 100644 --- a/reference/queue/queue/swap.md +++ b/reference/queue/queue/swap.md @@ -6,7 +6,12 @@ * cpp11[meta cpp] ```cpp -void swap(queue& q) noexcept(noexcept(swap(c, q.c))) +void + swap(queue& q) + noexcept(noexcept(swap(c, q.c))); // (1) C++11 +constexpr void + swap(queue& q) + noexcept(noexcept(swap(c, q.c))); // (1) C++26 ``` ## 概要 @@ -82,3 +87,4 @@ int main () ## 参照 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/queue/queue/swap_free.md b/reference/queue/queue/swap_free.md index 01d5fcdd3b..93beabd144 100644 --- a/reference/queue/queue/swap_free.md +++ b/reference/queue/queue/swap_free.md @@ -7,7 +7,15 @@ ```cpp namespace std { template - void swap(queue& x, queue& y) noexcept(noexcept(x.swap(y))); + void + swap(queue& x, + queue& y) + noexcept(noexcept(x.swap(y))); // (1) C++11 + template + constexpr void + swap(queue& x, + queue& y) + noexcept(noexcept(x.swap(y))); // (1) C++26 } ``` @@ -84,3 +92,4 @@ int main () ## 参照 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/set/multiset/begin.md b/reference/set/multiset/begin.md index 721a5a9069..724d49129f 100644 --- a/reference/set/multiset/begin.md +++ b/reference/set/multiset/begin.md @@ -5,11 +5,13 @@ * function[meta id-type] ```cpp -iterator begin(); // (1) C++03 -iterator begin() noexcept; // (1) C++11 +iterator begin(); // (1) C++03 +iterator begin() noexcept; // (1) C++11 +constexpr iterator begin() noexcept; // (1) C++26 -const_iterator begin() const; // (2) C++03 -const_iterator begin() const noexcept; // (2) C++11 +const_iterator begin() const; // (2) C++03 +const_iterator begin() const noexcept; // (2) C++11 +constexpr const_iterator begin() const noexcept; // (2) C++26 ``` @@ -73,3 +75,7 @@ int main() | [`multiset::end`](end.md) | 末尾の次を指すイテレータを取得する | | [`multiset::rbegin`](rbegin.md) | 末尾を指す逆イテレータを取得する | | [`multiset::rend`](rend.md) | 先頭の前を指す逆イテレータを取得する | + + +## 参照 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/set/multiset/cbegin.md b/reference/set/multiset/cbegin.md index c6a3d9ed4c..87bc000a8b 100644 --- a/reference/set/multiset/cbegin.md +++ b/reference/set/multiset/cbegin.md @@ -6,7 +6,8 @@ * cpp11[meta cpp] ```cpp -const_iterator cbegin() const noexcept; +const_iterator cbegin() const noexcept; // (1) C++11 +constexpr const_iterator cbegin() const noexcept; // (1) C++26 ``` @@ -55,3 +56,7 @@ int main() | [`multiset::cend`](cend.md) | 末尾の次を指す読み取り専用イテレータを取得する | | [`multuset::rbegin`](rbegin.md) | 末尾を指す逆イテレータを取得する | | [`multiset::rend`](rend.md) | 先頭の前を指す逆イテレータを取得する | + + +## 参照 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/set/multiset/cend.md b/reference/set/multiset/cend.md index 9a68f756cf..d21e815307 100644 --- a/reference/set/multiset/cend.md +++ b/reference/set/multiset/cend.md @@ -6,7 +6,8 @@ * cpp11[meta cpp] ```cpp -const_iterator cend() const noexcept; +const_iterator cend() const noexcept; // (1) C++11 +constexpr const_iterator cend() const noexcept; // (1) C++26 ``` ## 概要 @@ -60,3 +61,7 @@ int main() | [`cbegin`](cbegin.md) | 先頭を指す読み取り専用イテレータを取得する | | [`rbegin`](rbegin.md) | 末尾を指す逆イテレータを取得する | | [`rend`](rend.md) | 先頭の前を指す逆イテレータを取得する | + + +## 参照 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/set/multiset/clear.md b/reference/set/multiset/clear.md index b807fe3747..f4d30308bd 100644 --- a/reference/set/multiset/clear.md +++ b/reference/set/multiset/clear.md @@ -5,8 +5,9 @@ * function[meta id-type] ```cpp -void clear(); // C++03 -void clear() noexcept; // C++11 +void clear(); // (1) C++03 +void clear() noexcept; // (1) C++11 +constexpr void clear() noexcept; // (1) C++26 ``` ## 概要 @@ -57,3 +58,7 @@ int main () | [`erase`](erase.md) | 要素を削除する | | [`size`](size.md) | 要素数を取得する | | [`empty`](empty.md) | コンテナが空であるかどうかを調べる | + + +## 参照 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/set/multiset/contains.md b/reference/set/multiset/contains.md index 182a5dbedc..1435322404 100644 --- a/reference/set/multiset/contains.md +++ b/reference/set/multiset/contains.md @@ -6,10 +6,13 @@ * cpp20[meta cpp] ```cpp -bool contains(const key_type& x) const; // (1) +bool contains(const key_type& x) const; // (1) C++20 +constexpr bool contains(const key_type& x) const; // (1) C++26 template -bool contains(const K& x) const; // (2) +bool contains(const K& x) const; // (2) C++20 +template +constexpr bool contains(const K& x) const; // (2) C++26 ``` @@ -71,3 +74,4 @@ contain ## 参照 - [P0458R2 Checking for Existence of an Element in Associative Containers](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2018/p0458r2.html) +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/set/multiset/count.md b/reference/set/multiset/count.md index 7490ba2743..45237a9e4c 100644 --- a/reference/set/multiset/count.md +++ b/reference/set/multiset/count.md @@ -5,10 +5,13 @@ * function[meta id-type] ```cpp -size_type count(const key_type& x) const; // (1) +size_type count(const key_type& x) const; // (1) C++03 +constexpr size_type count(const key_type& x) const; // (1) C++26 template -size_type count(const K& x) const; // (2) C++14 +size_type count(const K& x) const; // (2) C++14 +template +constexpr size_type count(const K& x) const; // (2) C++26 ``` ## 概要 @@ -84,3 +87,4 @@ int main() ## 参照 - [N3657 Adding heterogeneous comparison lookup to associative containers (rev 4)](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2013/n3657.htm) +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/set/multiset/crbegin.md b/reference/set/multiset/crbegin.md index 2d84f21464..a95778900f 100644 --- a/reference/set/multiset/crbegin.md +++ b/reference/set/multiset/crbegin.md @@ -6,7 +6,8 @@ * cpp11[meta cpp] ```cpp -const_reverse_iterator crbegin() const noexcept; +const_reverse_iterator crbegin() const noexcept; // (1) C++11 +constexpr const_reverse_iterator crbegin() const noexcept; // (1) C++26 ``` @@ -57,3 +58,7 @@ int main() | [`crend`](crend.md) | 先頭の前を指す読み取り専用逆イテレータを取得する | | [`cbegin`](cbegin.md) | 先頭を指す読み取り専用イテレータを取得する | | [`cend`](cend.md) | 末尾の次を指す読み取り専用イテレータを取得する | + + +## 参照 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/set/multiset/crend.md b/reference/set/multiset/crend.md index 1753fc0250..e8060b82ae 100644 --- a/reference/set/multiset/crend.md +++ b/reference/set/multiset/crend.md @@ -6,7 +6,8 @@ * cpp11[meta cpp] ```cpp -const_reverse_iterator crend() const noexcept; +const_reverse_iterator crend() const noexcept; // (1) C++11 +constexpr const_reverse_iterator crend() const noexcept; // (1) C++26 ``` @@ -53,3 +54,7 @@ int main() | [`crbegin`](crbegin.md) | 末尾を指す読み取り専用逆イテレータを返す | | [`cbegin`](cbegin.md) | 先頭を指す読み取り専用イテレータを返す | | [`cend`](cend.md) | 末尾の次を指す読み取り専用イテレータを返す | + + +## 参照 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/set/multiset/emplace.md b/reference/set/multiset/emplace.md index 843f574a56..f88abca766 100644 --- a/reference/set/multiset/emplace.md +++ b/reference/set/multiset/emplace.md @@ -7,7 +7,11 @@ ```cpp template -pair emplace(Args&&... args); +pair + emplace(Args&&... args); // (1) C++11 +template +constexpr pair + emplace(Args&&... args); // (1) C++26 ``` ## 概要 @@ -81,3 +85,4 @@ int main() ## 参照 - [N2680 Proposed Wording for Placement Insert (Revision 1)](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2680.pdf) +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/set/multiset/emplace_hint.md b/reference/set/multiset/emplace_hint.md index 10ba5f7b91..cda575694f 100644 --- a/reference/set/multiset/emplace_hint.md +++ b/reference/set/multiset/emplace_hint.md @@ -7,7 +7,9 @@ ```cpp template -iterator emplace_hint(const_iterator hint, Args&&... args); +iterator emplace_hint(const_iterator hint, Args&&... args); // (1) C++11 +template +constexpr iterator emplace_hint(const_iterator hint, Args&&... args); // (1) C++26 ``` ## 概要 @@ -87,3 +89,4 @@ int main() ## 参照 - [N2680 Proposed Wording for Placement Insert (Revision 1)](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2680.pdf) +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/set/multiset/empty.md b/reference/set/multiset/empty.md index 6460abf3a4..8a2ea12251 100644 --- a/reference/set/multiset/empty.md +++ b/reference/set/multiset/empty.md @@ -5,10 +5,10 @@ * function[meta id-type] ```cpp -bool empty() const; // C++03 -bool empty() const noexcept; // C++11 -[[nodiscard]] bool empty() const noexcept; // C++20 -bool empty() const noexcept; // C++26 +bool empty() const; // (1) C++03 +bool empty() const noexcept; // (1) C++11 +[[nodiscard]] bool empty() const noexcept; // (1) C++20 +constexpr bool empty() const noexcept; // (1) C++26 ``` ## 概要 @@ -64,3 +64,4 @@ int main () - C++20で`[[nodiscard]]`が付加された - [P2422R1 Remove `nodiscard` annotations from the standard library specification](https://open-std.org/jtc1/sc22/wg21/docs/papers/2024/p2422r1.html) - C++26で`[[nodiscard]]`指定が削除された +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/set/multiset/end.md b/reference/set/multiset/end.md index 8b1f2daa2f..90e156ef28 100644 --- a/reference/set/multiset/end.md +++ b/reference/set/multiset/end.md @@ -5,11 +5,13 @@ * function[meta id-type] ```cpp -iterator end(); // (1) C++03 -iterator end() noexcept; // (1) C++11 +iterator end(); // (1) C++03 +iterator end() noexcept; // (1) C++11 +constexpr iterator end() noexcept; // (1) C++26 -const_iterator end() const; // (2) C++03 -const_iterator end() const noexcept; // (2) C++11 +const_iterator end() const; // (2) C++03 +const_iterator end() const noexcept; // (2) C++11 +constexpr const_iterator end() const noexcept; // (2) C++26 ``` ## 概要 @@ -74,3 +76,7 @@ int main() | [`begin`](begin.md) | 先頭を指すイテレータを取得する | | [`rbegin`](rbegin.md) | 末尾を指す逆イテレータを取得する | | [`rend`](rend.md) | 先頭の前を指す逆イテレータを取得する | + + +## 参照 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/set/multiset/equal_range.md b/reference/set/multiset/equal_range.md index a3a9119898..c70cd08c75 100644 --- a/reference/set/multiset/equal_range.md +++ b/reference/set/multiset/equal_range.md @@ -5,17 +5,29 @@ * function[meta id-type] ```cpp -pair equal_range(const key_type& x); // (1) +pair + equal_range(const key_type& x); // (1) C++03 +constexpr pair + equal_range(const key_type& x); // (1) C++26 template -pair equal_range(const K& x); // (2) C++14 +pair + equal_range(const K& x); // (2) C++14 +template +constexpr pair + equal_range(const K& x); // (2) C++26 pair - equal_range(const key_type& x) const; // (3) + equal_range(const key_type& x) const; // (3) C++03 +constexpr pair + equal_range(const key_type& x) const; // (3) C++26 template pair - equal_range(const K& x) const; // (4) C++14 + equal_range(const K& x) const; // (4) C++14 +template +constexpr pair + equal_range(const K& x) const; // (4) C++26 ``` ## 概要 @@ -77,3 +89,4 @@ B ## 参照 - [N3657 Adding heterogeneous comparison lookup to associative containers (rev 4)](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2013/n3657.htm) +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/set/multiset/erase.md b/reference/set/multiset/erase.md index f31a7564f3..6c2d3dd001 100644 --- a/reference/set/multiset/erase.md +++ b/reference/set/multiset/erase.md @@ -5,18 +5,24 @@ * function[meta id-type] ```cpp -void erase(iterator position); // (1) C++03 (C++11で一旦削除) -iterator erase(iterator position); // (1) C++17 +void erase(iterator position); // (1) C++03 (C++11で一旦削除) +iterator erase(iterator position); // (1) C++17 +constexpr iterator erase(iterator position); // (1) C++26 -iterator erase(const_iterator position); // (2) C++11 +iterator erase(const_iterator position); // (2) C++11 +constexpr iterator erase(const_iterator position); // (2) C++26 -size_type erase(const key_type& x); // (3) C++03 +size_type erase(const key_type& x); // (3) C++03 +constexpr size_type erase(const key_type& x); // (3) C++26 template -size_type erase(K&& x); // (4) C++23 +size_type erase(K&& x); // (4) C++23 +template +constexpr size_type erase(K&& x); // (4) C++26 -void erase(iterator first, iterator last); // (5) C++03 -iterator erase(const_iterator first, const_iterator last); // (5) C++11 +void erase(iterator first, iterator last); // (5) C++03 +iterator erase(const_iterator first, const_iterator last); // (5) C++11 +constexpr iterator erase(const_iterator first, const_iterator last); // (5) C++26 ``` @@ -172,3 +178,4 @@ int main() - C++17で、`erase(iterator)`を再追加 - [P2077R3 Heterogeneous erasure overloads for associative containers](https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2021/p2077r3.html) - C++23で、`template erase(K&& x)`のオーバーロードが追加された +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/set/multiset/erase_if_free.md b/reference/set/multiset/erase_if_free.md index 6d846ca1e9..35aa3ef1d4 100644 --- a/reference/set/multiset/erase_if_free.md +++ b/reference/set/multiset/erase_if_free.md @@ -8,7 +8,10 @@ namespace std { template typename multiset::size_type - erase_if(multiset& c, Predicate pred); + erase_if(multiset& c, Predicate pred); // (1) C++20 + template + constexpr typename multiset::size_type + erase_if(multiset& c, Predicate pred); // (1) C++26 } ``` @@ -78,3 +81,4 @@ int main() ## 参照 - [P1209R0 Adopt consistent container erasure from Library Fundamentals 2](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2018/p1209r0.html) - [R1115R3 Improving the Return Value of Erase-Like Algorithms II: Free `erase`/`erase_if`](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2019/p1115r3.pdf) +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/set/multiset/extract.md b/reference/set/multiset/extract.md index 35a130f573..423597c341 100644 --- a/reference/set/multiset/extract.md +++ b/reference/set/multiset/extract.md @@ -6,12 +6,16 @@ * cpp17[meta cpp] ```cpp -node_type extract(const_iterator position); // (1) C++17 +node_type extract(const_iterator position); // (1) C++17 +constexpr node_type extract(const_iterator position); // (1) C++26 -node_type extract(const key_type& x); // (2) C++17 +node_type extract(const key_type& x); // (2) C++17 +constexpr node_type extract(const key_type& x); // (2) C++26 template -node_type extract(K&& x); // (3) C++23 +node_type extract(K&& x); // (3) C++23 +template +constexpr node_type extract(K&& x); // (3) C++26 ``` ## 概要 @@ -142,3 +146,4 @@ s2 = { 1, 2 } - [Splicing Maps and Sets(Revision 5)](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/p0083r3.pdf) - [P2077R3 Heterogeneous erasure overloads for associative containers](https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2021/p2077r3.html) - C++23で、`template extract(K&& x)`のオーバーロードが追加された +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/set/multiset/find.md b/reference/set/multiset/find.md index ae74d6658f..78d8b28a2d 100644 --- a/reference/set/multiset/find.md +++ b/reference/set/multiset/find.md @@ -5,15 +5,21 @@ * function[meta id-type] ```cpp -iterator find(const key_type& x); // (1) +iterator find(const key_type& x); // (1) C++03 +constexpr iterator find(const key_type& x); // (1) C++26 template -iterator find(const K& x); // (2) C++14 +iterator find(const K& x); // (2) C++14 +template +constexpr iterator find(const K& x); // (2) C++26 -const_iterator find(const key_type& x) const; // (3) +const_iterator find(const key_type& x) const; // (3) C++03 +constexpr const_iterator find(const key_type& x) const; // (3) C++26 template -const_iterator find(const K& x) const; // (4) C++14 +const_iterator find(const K& x) const; // (4) C++14 +template +constexpr const_iterator find(const K& x) const; // (4) C++26 ``` ## 概要 @@ -95,3 +101,4 @@ Bob ## 参照 - [N3657 Adding heterogeneous comparison lookup to associative containers (rev 4)](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2013/n3657.htm) - [LWG Issue 2299. [CD] Effects of inaccessible `key_compare::is_transparent` type are not clear](http://www.open-std.org/jtc1/sc22/wg21/docs/lwg-defects.html#2299) +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/set/multiset/get_allocator.md b/reference/set/multiset/get_allocator.md index b8bb6a1c06..9d8b4f4a67 100644 --- a/reference/set/multiset/get_allocator.md +++ b/reference/set/multiset/get_allocator.md @@ -5,8 +5,9 @@ * function[meta id-type] ```cpp -allocator_type get_allocator() const; // C++03 -allocator_type get_allocator() const noexcept; // C++11 +allocator_type get_allocator() const; // (1) C++03 +allocator_type get_allocator() const noexcept; // (1) C++11 +constexpr allocator_type get_allocator() const noexcept; // (1) C++26 ``` ## 概要 @@ -66,3 +67,7 @@ int main() - [Visual C++](/implementation.md#visual_cpp): 2002 [mark verified], 2003 [mark verified], 2005 [mark verified], 2008 [mark verified], 2010 [mark verified], 2012 [mark verified], 2013 [mark verified], 2015 [mark verified], 2017 [mark verified] - 2012, 2013は、`noexcept`が実装されていないため、`throw()`が修飾されている。 - 2015からは、`noexcept`が修飾されている。 + + +## 参照 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/set/multiset/insert.md b/reference/set/multiset/insert.md index 0a45de240a..0b3a64a8fa 100644 --- a/reference/set/multiset/insert.md +++ b/reference/set/multiset/insert.md @@ -5,21 +5,32 @@ * function[meta id-type] ```cpp -iterator insert(const value_type& x); // (1) -iterator insert(value_type&& y); // (2) C++11 +iterator insert(const value_type& x); // (1) C++03 +constexpr iterator insert(const value_type& x); // (1) C++26 -iterator insert(iterator position, const value_type& x); // (3) C++03 -iterator insert(const_iterator position, const value_type& x); // (3) C++11 +iterator insert(value_type&& y); // (2) C++11 +constexpr iterator insert(value_type&& y); // (2) C++26 -iterator insert(const_iterator position, value_type&& y); // (4) C++11 +iterator insert(iterator position, const value_type& x); // (3) C++03 +iterator insert(const_iterator position, const value_type& x); // (3) C++11 +constexpr iterator insert(const_iterator position, const value_type& x); // (3) C++26 +iterator insert(const_iterator position, value_type&& y); // (4) C++11 +constexpr iterator insert(const_iterator position, value_type&& y); // (4) C++26 + +template +void insert(InputIterator first, InputIterator last); // (5) C++03 template -void insert(InputIterator first, InputIterator last); // (5) +constexpr void insert(InputIterator first, InputIterator last); // (5) C++26 + +void insert(initializer_list init); // (6) C++03 +constexpr void insert(initializer_list init); // (6) C++26 -void insert(initializer_list init); // (6) +iterator insert(node_type&& nh); // (7) C++17 +constexpr iterator insert(node_type&& nh); // (7) C++26 -iterator insert(node_type&& nh); // (7) C++17 -iterator insert(const_iterator hint, node_type&& nh); // (8) C++17 +iterator insert(const_iterator hint, node_type&& nh); // (8) C++17 +constexpr iterator insert(const_iterator hint, node_type&& nh); // (8) C++26 ``` * initializer_list[link /reference/initializer_list/initializer_list.md] @@ -107,3 +118,4 @@ int main () - [N2679 Initializer Lists for Standard Containers(Revision 1)](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2679.pdf) - [Splicing Maps and Sets(Revision 5)](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/p0083r3.pdf) - (7), (8)経緯となる提案文書 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/set/multiset/insert_range.md b/reference/set/multiset/insert_range.md index cb78279fc9..bddc6a2adf 100644 --- a/reference/set/multiset/insert_range.md +++ b/reference/set/multiset/insert_range.md @@ -7,7 +7,9 @@ ```cpp template R> -void insert_range(R&& rg); // C++23 +void insert_range(R&& rg); // (1) C++23 +template R> +constexpr void insert_range(R&& rg); // (1) C++26 ``` ## 概要 @@ -63,3 +65,7 @@ int main () | 名前 | 説明 | |----------------------------|------------------------| | [`insert`](insert.md) | 要素を挿入する | + + +## 参照 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/set/multiset/key_comp.md b/reference/set/multiset/key_comp.md index 6daa1ac789..77b244f615 100644 --- a/reference/set/multiset/key_comp.md +++ b/reference/set/multiset/key_comp.md @@ -5,7 +5,8 @@ * function[meta id-type] ```cpp -key_compare key_comp() const; +key_compare key_comp() const; // (1) C++03 +constexpr key_compare key_comp() const; // (1) C++26 ``` ## 概要 @@ -53,3 +54,7 @@ int main() | [`count`](count.md) | 指定したキーにマッチする要素の数を返す | | [`lower_bound`](lower_bound.md) | 与えられた値より小さく無い最初の要素へのイテレータを返す | | [`upper_bound`](upper_bound.md) | 特定の値よりも大きい最初の要素へのイテレータを返す | + + +## 参照 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/set/multiset/lower_bound.md b/reference/set/multiset/lower_bound.md index 04cd499954..b20442781e 100644 --- a/reference/set/multiset/lower_bound.md +++ b/reference/set/multiset/lower_bound.md @@ -5,15 +5,21 @@ * function[meta id-type] ```cpp -iterator lower_bound(const key_type& x); // (1) +iterator lower_bound(const key_type& x); // (1) C++03 +constexpr iterator lower_bound(const key_type& x); // (1) C++26 template -iterator lower_bound(const K& x); // (2) C++14 +iterator lower_bound(const K& x); // (2) C++14 +template +constexpr iterator lower_bound(const K& x); // (2) C++26 -const_iterator lower_bound(const key_type& x) const; // (3) +const_iterator lower_bound(const key_type& x) const; // (3) C++03 +constexpr const_iterator lower_bound(const key_type& x) const; // (3) C++26 template -const_iterator lower_bound(const K& x) const; // (4) C++14 +const_iterator lower_bound(const K& x) const; // (4) C++14 +template +constexpr const_iterator lower_bound(const K& x) const; // (4) C++26 ``` ## 概要 @@ -109,3 +115,4 @@ D ## 参照 - [N3657 Adding heterogeneous comparison lookup to associative containers (rev 4)](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2013/n3657.htm) +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/set/multiset/max_size.md b/reference/set/multiset/max_size.md index 3ebef31dbe..402180e38f 100644 --- a/reference/set/multiset/max_size.md +++ b/reference/set/multiset/max_size.md @@ -5,8 +5,9 @@ * function[meta id-type] ```cpp -size_type max_size() const; // C++03 -size_type max_size() const noexcept; // C++11 +size_type max_size() const; // (1) C++03 +size_type max_size() const noexcept; // (1) C++11 +constexpr size_type max_size() const noexcept; // (1) C++26 ``` ## 概要 @@ -47,3 +48,7 @@ int main () | 名前 | 説明 | |---------------------|------------------| | [`size`](size.md) | 要素数を取得する | + + +## 参照 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/set/multiset/merge.md b/reference/set/multiset/merge.md index 6ed8b10eda..22ecc29ad4 100644 --- a/reference/set/multiset/merge.md +++ b/reference/set/multiset/merge.md @@ -7,13 +7,24 @@ ```cpp template - void merge(set& source); // (1) +void merge(set& source); // (1) C++17 template - void merge(set&& source); // (2) +constexpr void merge(set& source); // (1) C++26 + +template +void merge(set&& source); // (2) C++17 +template +constexpr void merge(set&& source); // (2) C++26 + +template +void merge(multiset& source); // (3) C++17 +template +constexpr void merge(multiset& source); // (3) C++26 + template - void merge(multiset& source); // (3) +void merge(multiset&& source); // (4) C++17 template - void merge(multiset&& source); // (4) +constexpr void merge(multiset&& source); // (4) C++26 ``` ## 概要 @@ -91,3 +102,4 @@ s2 = { 10, 10, 20, 30 } ## 参照 - [Splicing Maps and Sets(Revision 5)](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/p0083r3.pdf) +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/set/multiset/op_assign.md b/reference/set/multiset/op_assign.md index f96d890248..14c7335d72 100644 --- a/reference/set/multiset/op_assign.md +++ b/reference/set/multiset/op_assign.md @@ -5,12 +5,19 @@ * function[meta id-type] ```cpp -multiset& operator=(const multiset& x); // (1) C++03 -multiset& operator=(multiset&& x); // (2) C++11 +multiset& operator=(const multiset& x); // (1) C++03 +constexpr multiset& operator=(const multiset& x); // (1) C++26 + +multiset& operator=(multiset&& x); // (2) C++11 multiset& operator=(multiset&& x) noexcept(allocator_traits::is_always_equal::value - && is_nothrow_move_assignable::value); // (2) C++17 -multiset& operator=(initializer_list init); // (3) C++11 + && is_nothrow_move_assignable::value); // (2) C++17 +constexpr multiset& operator=(multiset&& x) + noexcept(allocator_traits::is_always_equal::value + && is_nothrow_move_assignable::value); // (2) C++26 + +multiset& operator=(initializer_list init); // (3) C++11 +constexpr multiset& operator=(initializer_list init); // (3) C++26 ``` * initializer_list[link ../../initializer_list.md] @@ -82,3 +89,4 @@ Size of c2: 7 - [N2679 Initializer Lists for Standard Containers(Revision 1)](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2679.pdf) - [N4258 Cleaning-up noexcept in the Library, Rev 3](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n4258.pdf) - `noexcept` 追加の経緯となる提案文書 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/set/multiset/op_compare_3way.md b/reference/set/multiset/op_compare_3way.md index 2539024862..749ba4b357 100644 --- a/reference/set/multiset/op_compare_3way.md +++ b/reference/set/multiset/op_compare_3way.md @@ -10,6 +10,10 @@ namespace std { synth-three-way-result operator<=>(const multiset& x, const multiset& y); // (1) C++20 + template + constexpr synth-three-way-result + operator<=>(const multiset& x, + const multiset& y); // (1) C++26 } ``` @@ -75,3 +79,4 @@ int main() ## 参照 - [P1614R2 The Mothership has Landed](https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2019/p1614r2.html) - C++20での三方比較演算子の追加と、関連する演算子の自動導出 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/set/multiset/op_constructor.md b/reference/set/multiset/op_constructor.md index 5f80bb239d..4bd0757ab4 100644 --- a/reference/set/multiset/op_constructor.md +++ b/reference/set/multiset/op_constructor.md @@ -5,51 +5,101 @@ * function[meta id-type] ```cpp -multiset(); // (1) C++14 +multiset(); // (1) C++14 +constexpr multiset(); // (1) C++26 -explicit multiset(const Compare& comp, - const Allocator& = Allocator()); // (2) C++14 +explicit + multiset(const Compare& comp, + const Allocator& = Allocator()); // (2) C++14 +constexpr explicit + multiset(const Compare& comp, + const Allocator& = Allocator()); // (2) C++26 explicit multiset(const Compare& comp = Compare(), - const Allocator& alloc = Allocator()); // (1) + (2) C++03 + const Allocator& alloc = Allocator()); // (1) + (2) C++03 -explicit multiset(const Allocator& alloc); // (3) C++11 +explicit multiset(const Allocator& alloc); // (3) C++11 +constexpr explicit multiset(const Allocator& alloc); // (3) C++26 template -multiset(InputIterator first, InputIterator last, - const Compare& comp = Compare(), - const Allocator& alloc = Allocator()); // (4) C++03 +multiset(InputIterator first, + InputIterator last, + const Compare& comp = Compare(), + const Allocator& alloc = Allocator()); // (4) C++03 +template +constexpr + multiset(InputIterator first, + InputIterator last, + const Compare& comp = Compare(), + const Allocator& alloc = Allocator()); // (4) C++26 template -multiset(InputIterator first, InputIterator last, - const Allocator& a); // (5) C++14 +multiset(InputIterator first, + InputIterator last, + const Allocator& a); // (5) C++14 +template +constexpr + multiset(InputIterator first, + InputIterator last, + const Allocator& a); // (5) C++26 + +multiset(const set& x); // (6) C++03 +constexpr multiset(const set& x); // (6) C++26 -multiset(const set& x); // (6) C++03 -multiset(set&& y); // (7) C++11 +multiset(set&& y); // (7) C++11 +constexpr multiset(set&& y); // (7) C++26 -multiset(const multiset& x, const Allocator& alloc); // (8) C++11 multiset(const multiset& x, - const type_identity_t& alloc); // (8) C++23 + const Allocator& alloc); // (8) C++11 +multiset(const multiset& x, + const type_identity_t& alloc); // (8) C++23 +constexpr + multiset(const multiset& x, + const type_identity_t& alloc); // (8) C++26 -multiset(multiset&& y, const Allocator& alloc); // (9) C++11 multiset(multiset&& y, - const type_identity_t& alloc); // (9) C++23 + const Allocator& alloc); // (9) C++11 +multiset(multiset&& y, + const type_identity_t& alloc); // (9) C++23 +constexpr + multiset(multiset&& y, + const type_identity_t& alloc); // (9) C++26 multiset(initializer_list init, const Compare& comp = Compare(), - const Allocator& alloc = Allocator()); // (10) C++11 + const Allocator& alloc = Allocator()); // (10) C++11 +constexpr + multiset(initializer_list init, + const Compare& comp = Compare(), + const Allocator& alloc = Allocator()); // (10) C++26 multiset(initializer_list init, - const Allocator& a); // (11) C++14 + const Allocator& a); // (11) C++14 +constexpr + multiset(initializer_list init, + const Allocator& a); // (11) C++26 template R> -multiset(from_range_t, R&& rg, +multiset(from_range_t, + R&& rg, const Compare& comp = Compare(), - const Allocator& alloc = Allocator()); // (12) C++23 + const Allocator& alloc = Allocator()); // (12) C++23 +template R> +constexpr + multiset(from_range_t, + R&& rg, + const Compare& comp = Compare(), + const Allocator& alloc = Allocator()); // (12) C++26 template R> -multiset(from_range_t, R&& rg, - const Allocator& alloc); // (13) C++23 +multiset(from_range_t, + R&& rg, + const Allocator& alloc); // (13) C++23 +template R> +constexpr + multiset(from_range_t, + R&& rg, + const Allocator& alloc); // (13) C++26 ``` * type_identity_t[link /reference/type_traits/type_identity.md] * initializer_list[link ../../initializer_list.md] @@ -164,3 +214,4 @@ Size of c2: 7 なお、Discussion の例はアロケータの型が誤っているので注意 - [P1518R2 Stop Overconstraining Allocators in Container Deduction Guides](https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2021/p1518r2.html) - C++23でのアロケータ引数を`type_identity_t`で包む変更 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/set/multiset/op_destructor.md b/reference/set/multiset/op_destructor.md index 937fe5b028..ad253220e7 100644 --- a/reference/set/multiset/op_destructor.md +++ b/reference/set/multiset/op_destructor.md @@ -5,7 +5,8 @@ * function[meta id-type] ```cpp -~multiset(); +~multiset(); // (1) C++03 +constexpr ~multiset(); // (1) C++26 ``` ## 概要 @@ -14,3 +15,7 @@ ## 計算量 [`size()`](size.md) に対して線形時間(デストラクタ呼び出し) + + +## 参照 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/set/multiset/op_equal.md b/reference/set/multiset/op_equal.md index 1c3cc1ac2e..08e61d52b5 100644 --- a/reference/set/multiset/op_equal.md +++ b/reference/set/multiset/op_equal.md @@ -9,6 +9,10 @@ namespace std { bool operator==(const multiset& x, const multiset& y); // (1) C++03 + template + constexpr bool + operator==(const multiset& x, + const multiset& y); // (1) C++26 } ``` @@ -65,3 +69,4 @@ int main() - C++14から、2つ目のイテレータ範囲のendイテレータをとる`equal()`アルゴリズムを使用するようになった。 - [P1614R2 The Mothership has Landed](https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2019/p1614r2.html) - C++20での三方比較演算子の追加と、関連する演算子の自動導出 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/set/multiset/op_greater.md b/reference/set/multiset/op_greater.md index de9241d4fe..72892c9105 100644 --- a/reference/set/multiset/op_greater.md +++ b/reference/set/multiset/op_greater.md @@ -10,6 +10,10 @@ namespace std { bool operator>(const multiset& x, const multiset& y); // (1) C++03 + template + constexpr bool + operator>(const multiset& x, + const multiset& y); // (1) C++26 } ``` @@ -63,3 +67,4 @@ int main() ## 参照 - [P1614R2 The Mothership has Landed](https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2019/p1614r2.html) - C++20での三方比較演算子の追加と、関連する演算子の自動導出 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/set/multiset/op_greater_equal.md b/reference/set/multiset/op_greater_equal.md index 006133c7c5..0c3a01313b 100644 --- a/reference/set/multiset/op_greater_equal.md +++ b/reference/set/multiset/op_greater_equal.md @@ -10,6 +10,10 @@ namespace std { bool operator>=(const multiset& x, const multiset& y); // (1) C++03 + template + constexpr bool + operator>=(const multiset& x, + const multiset& y); // (1) C++26 } ``` @@ -63,3 +67,4 @@ int main() ## 参照 - [P1614R2 The Mothership has Landed](https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2019/p1614r2.html) - C++20での三方比較演算子の追加と、関連する演算子の自動導出 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/set/multiset/op_less.md b/reference/set/multiset/op_less.md index 8daa1cb93a..a801e00965 100644 --- a/reference/set/multiset/op_less.md +++ b/reference/set/multiset/op_less.md @@ -10,6 +10,10 @@ namespace std { bool operator<(const multiset& x, const multiset& y); // (1) C++03 + template + constexpr bool + operator<(const multiset& x, + const multiset& y); // (1) C++26 } ``` @@ -61,3 +65,4 @@ true ## 参照 - [P1614R2 The Mothership has Landed](https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2019/p1614r2.html) - C++20での三方比較演算子の追加と、関連する演算子の自動導出 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/set/multiset/op_less_equal.md b/reference/set/multiset/op_less_equal.md index 971590d3f0..66e2e4409d 100644 --- a/reference/set/multiset/op_less_equal.md +++ b/reference/set/multiset/op_less_equal.md @@ -10,6 +10,10 @@ namespace std { bool operator<=(const multiset& x, const multiset& y); // (1) C++03 + template + constexpr bool + operator<=(const multiset& x, + const multiset& y); // (1) C++26 } ``` @@ -63,3 +67,4 @@ int main() ## 参照 - [P1614R2 The Mothership has Landed](https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2019/p1614r2.html) - C++20での三方比較演算子の追加と、関連する演算子の自動導出 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/set/multiset/op_not_equal.md b/reference/set/multiset/op_not_equal.md index a6fced7871..061d79251f 100644 --- a/reference/set/multiset/op_not_equal.md +++ b/reference/set/multiset/op_not_equal.md @@ -10,6 +10,10 @@ namespace std { bool operator!=(const multiset& x, const multiset& y); // (1) C++03 + template + constexpr bool + operator!=(const multiset& x, + const multiset& y); // (1) C++26 } ``` @@ -63,3 +67,4 @@ int main() ## 参照 - [P1614R2 The Mothership has Landed](https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2019/p1614r2.html) - C++20での三方比較演算子の追加と、関連する演算子の自動導出 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/set/multiset/rbegin.md b/reference/set/multiset/rbegin.md index 4b4c0d932e..1d4eece4c6 100644 --- a/reference/set/multiset/rbegin.md +++ b/reference/set/multiset/rbegin.md @@ -5,11 +5,13 @@ * function[meta id-type] ```cpp -reverse_iterator rbegin(); // (1) C++03 -reverse_iterator rbegin() noexcept; // (1) C++11 +reverse_iterator rbegin(); // (1) C++03 +reverse_iterator rbegin() noexcept; // (1) C++11 +constexpr reverse_iterator rbegin() noexcept; // (1) C++26 -const_reverse_iterator rbegin() const; // (2) C++03 -const_reverse_iterator rbegin() const noexcept; // (2) C++11 +const_reverse_iterator rbegin() const; // (2) C++03 +const_reverse_iterator rbegin() const noexcept; // (2) C++11 +constexpr const_reverse_iterator rbegin() const noexcept; // (2) C++26 ``` @@ -69,3 +71,7 @@ int main() | [`rend`](rend.md) | 先頭の前を指す逆イテレータを取得する | | [`begin`](begin.md) | 先頭を指すイテレータを取得する | | [`end`](end.md) | 末尾の次を指すイテレータを取得する | + + +## 参照 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/set/multiset/rend.md b/reference/set/multiset/rend.md index ad243ceb78..95f9e44656 100644 --- a/reference/set/multiset/rend.md +++ b/reference/set/multiset/rend.md @@ -5,11 +5,13 @@ * function[meta id-type] ```cpp -reverse_iterator rend(); // (1) C++03 -reverse_iterator rend() noexcept; // (1) C++11 +reverse_iterator rend(); // (1) C++03 +reverse_iterator rend() noexcept; // (1) C++11 +constexpr reverse_iterator rend() noexcept; // (1) C++26 -const_reverse_iterator rend() const; // (2) C++03 -const_reverse_iterator rend() const noexcept; // (2) C++11 +const_reverse_iterator rend() const; // (2) C++03 +const_reverse_iterator rend() const noexcept; // (2) C++11 +constexpr const_reverse_iterator rend() const noexcept; // (2) C++26 ``` @@ -63,3 +65,7 @@ int main() | [`rbegin`](rbegin.md) | 末尾を指す逆イテレータを返す | | [`begin`](begin.md) | 先頭を指すイテレータを返す | | [`end`](end.md) | 末尾の次を指すイテレータを返す | + + +## 参照 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/set/multiset/size.md b/reference/set/multiset/size.md index 4c3061b138..bfdc00eeb0 100644 --- a/reference/set/multiset/size.md +++ b/reference/set/multiset/size.md @@ -5,8 +5,9 @@ * function[meta id-type] ```cpp -size_type size() const; // C++03 -size_type size() const noexcept; // C++11 +size_type size() const; // (1) C++03 +size_type size() const noexcept; // (1) C++11 +constexpr size_type size() const noexcept; // (1) C++26 ``` ## 概要 @@ -56,3 +57,7 @@ int main () |-----------------------------|------------------------------------| | [`max_size`](max_size.md) | 格納可能な最大の要素数を取得する | | [`empty`](empty.md) | コンテナが空であるかどうかを調べる | + + +## 参照 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/set/multiset/swap.md b/reference/set/multiset/swap.md index 3269c8b413..50f640178d 100644 --- a/reference/set/multiset/swap.md +++ b/reference/set/multiset/swap.md @@ -5,10 +5,13 @@ * function[meta id-type] ```cpp -void swap(multiset& st); +void swap(multiset& st); // (1) C++03 void swap(multiset& x) noexcept(allocator_traits::is_always_equal::value - && noexcept(swap(declval(),declval()))); // C++17 + && noexcept(swap(declval(),declval()))); // (1) C++17 +constexpr void swap(multiset& x) + noexcept(allocator_traits::is_always_equal::value + && noexcept(swap(declval(),declval()))); // (1) C++26 ``` ## 概要 @@ -63,3 +66,4 @@ int main() ## 参照 - [N4258 Cleaning-up noexcept in the Library, Rev 3](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n4258.pdf) - `noexcept` 追加の経緯となる提案文書 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/set/multiset/swap_free.md b/reference/set/multiset/swap_free.md index 488f2c8056..67960d35bd 100644 --- a/reference/set/multiset/swap_free.md +++ b/reference/set/multiset/swap_free.md @@ -6,13 +6,19 @@ ```cpp namespace std { template - void swap(multiset& x, - multiset& y); - + void + swap(multiset& x, + multiset& y); // (1) C++03 + template + void + swap(multiset& x, + multiset& y) + noexcept(noexcept(x.swap(y))); // (1) C++17 template - void swap(multiset& x, - multiset& y) - noexcept(noexcept(x.swap(y))); // C++17 + constexpr void + swap(multiset& x, + multiset& y) + noexcept(noexcept(x.swap(y))); // (1) C++26 } ``` @@ -68,3 +74,4 @@ int main() ## 参照 - [N4258 Cleaning-up noexcept in the Library, Rev 3](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n4258.pdf) - `noexcept` 追加の経緯となる提案文書 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/set/multiset/upper_bound.md b/reference/set/multiset/upper_bound.md index f60cb6e902..126295b2fe 100644 --- a/reference/set/multiset/upper_bound.md +++ b/reference/set/multiset/upper_bound.md @@ -5,15 +5,21 @@ * function[meta id-type] ```cpp -iterator upper_bound(const key_type& x); // (1) +iterator upper_bound(const key_type& x); // (1) C++03 +constexpr iterator upper_bound(const key_type& x); // (1) C++26 template -iterator upper_bound(const K& x); // (2) C++14 +iterator upper_bound(const K& x); // (2) C++14 +template +constexpr iterator upper_bound(const K& x); // (2) C++26 -const_iterator upper_bound(const key_type& x) const; // (3) +const_iterator upper_bound(const key_type& x) const; // (3) C++03 +constexpr const_iterator upper_bound(const key_type& x) const; // (3) C++26 template -const_iterator upper_bound(const K& x) const; // (4) C++14 +const_iterator upper_bound(const K& x) const; // (4) C++14 +template +constexpr const_iterator upper_bound(const K& x) const; // (4) C++26 ``` ## 概要 @@ -109,3 +115,4 @@ D ## 参照 - [N3657 Adding heterogeneous comparison lookup to associative containers (rev 4)](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2013/n3657.htm) +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/set/multiset/value_comp.md b/reference/set/multiset/value_comp.md index 520e564120..0ed427bbfe 100644 --- a/reference/set/multiset/value_comp.md +++ b/reference/set/multiset/value_comp.md @@ -5,7 +5,8 @@ * function[meta id-type] ```cpp -value_compare value_comp() const; +value_compare value_comp() const; // (1) C++03 +constexpr value_compare value_comp() const; // (1) C++26 ``` ## 概要 @@ -54,3 +55,7 @@ int main() | [`count`](count.md) | 指定したキーにマッチする要素の数を返す | | [`lower_bound`](lower_bound.md) | 与えられた値より小さくない最初の要素へのイテレータを返す | | [`upper_bound`](upper_bound.md) | 特定の値よりも大きい最初の要素へのイテレータを返す | + + +## 参照 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/set/set/begin.md b/reference/set/set/begin.md index fd041908f6..00adad9dc6 100644 --- a/reference/set/set/begin.md +++ b/reference/set/set/begin.md @@ -5,11 +5,13 @@ * function[meta id-type] ```cpp -iterator begin(); // (1) C++03 -iterator begin() noexcept; // (1) C++11 +iterator begin(); // (1) C++03 +iterator begin() noexcept; // (1) C++11 +constexpr iterator begin() noexcept; // (1) C++26 -const_iterator begin() const; // (2) C++03 -const_iterator begin() const noexcept; // (2) C++11 +const_iterator begin() const; // (2) C++03 +const_iterator begin() const noexcept; // (2) C++11 +constexpr const_iterator begin() const noexcept; // (2) C++26 ``` @@ -73,3 +75,7 @@ int main() | [`set::end`](end.md) | 末尾の次を指すイテレータを取得する | | [`set::rbegin`](rbegin.md) | 末尾を指す逆イテレータを取得する | | [`set::rend`](rend.md) | 先頭の前を指す逆イテレータを取得する | + + +## 参照 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/set/set/cbegin.md b/reference/set/set/cbegin.md index 3231d92b05..8ae03e6a90 100644 --- a/reference/set/set/cbegin.md +++ b/reference/set/set/cbegin.md @@ -6,7 +6,8 @@ * cpp11[meta cpp] ```cpp -const_iterator cbegin() const noexcept; +const_iterator cbegin() const noexcept; // (1) C++11 +constexpr const_iterator cbegin() const noexcept; // (1) C++26 ``` @@ -55,3 +56,7 @@ int main() | [`set::cend`](cend.md) | 末尾の次を指す読み取り専用イテレータを取得する | | [`set::rbegin`](rbegin.md) | 末尾を指す逆イテレータを取得する | | [`set::rend`](rend.md) | 先頭の前を指す逆イテレータを取得する | + + +## 参照 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/set/set/cend.md b/reference/set/set/cend.md index 2a5fa8bb4a..4df8f9088c 100644 --- a/reference/set/set/cend.md +++ b/reference/set/set/cend.md @@ -6,7 +6,8 @@ * cpp11[meta cpp] ```cpp -const_iterator cend() const noexcept; +const_iterator cend() const noexcept; // (1) C++11 +constexpr const_iterator cend() const noexcept; // (1) C++26 ``` ## 概要 @@ -60,3 +61,7 @@ int main() | [`cbegin`](cbegin.md) | 先頭を指す読み取り専用イテレータを取得する | | [`rbegin`](rbegin.md) | 末尾を指す逆イテレータを取得する | | [`rend`](rend.md) | 先頭の前を指す逆イテレータを取得する | + + +## 参照 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/set/set/clear.md b/reference/set/set/clear.md index 8d7cac8736..9f276afd1c 100644 --- a/reference/set/set/clear.md +++ b/reference/set/set/clear.md @@ -5,8 +5,9 @@ * function[meta id-type] ```cpp -void clear(); // C++03 -void clear() noexcept; // C++11 +void clear(); // (1) C++03 +void clear() noexcept; // (1) C++11 +constexpr void clear() noexcept; // (1) C++26 ``` ## 概要 @@ -57,3 +58,7 @@ int main () | [`erase`](erase.md) | 要素を削除する | | [`size`](size.md) | 要素数を取得する | | [`empty`](empty.md) | コンテナが空であるかどうかを調べる | + + +## 参照 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/set/set/contains.md b/reference/set/set/contains.md index 4e54d6a9eb..469342d461 100644 --- a/reference/set/set/contains.md +++ b/reference/set/set/contains.md @@ -6,10 +6,13 @@ * cpp20[meta cpp] ```cpp -bool contains(const key_type& x) const; // (1) +bool contains(const key_type& x) const; // (1) C++20 +constexpr bool contains(const key_type& x) const; // (1) C++26 template -bool contains(const K& x) const; // (2) +bool contains(const K& x) const; // (2) C++20 +template +constexpr bool contains(const K& x) const; // (2) C++26 ``` @@ -71,3 +74,4 @@ contain ## 参照 - [P0458R2 Checking for Existence of an Element in Associative Containers](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2018/p0458r2.html) +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/set/set/count.md b/reference/set/set/count.md index f503075148..f60cf4249b 100644 --- a/reference/set/set/count.md +++ b/reference/set/set/count.md @@ -5,10 +5,13 @@ * function[meta id-type] ```cpp -size_type count(const key_type& x) const; // (1) +size_type count(const key_type& x) const; // (1) C++03 +constexpr size_type count(const key_type& x) const; // (1) C++26 template -size_type count(const K& x) const; // (2) C++14 +size_type count(const K& x) const; // (2) C++14 +template +constexpr size_type count(const K& x) const; // (2) C++26 ``` ## 概要 @@ -83,3 +86,4 @@ int main() ## 参照 - [N3657 Adding heterogeneous comparison lookup to associative containers (rev 4)](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2013/n3657.htm) +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/set/set/crbegin.md b/reference/set/set/crbegin.md index c600662616..c7694a49e1 100644 --- a/reference/set/set/crbegin.md +++ b/reference/set/set/crbegin.md @@ -6,7 +6,8 @@ * cpp11[meta cpp] ```cpp -const_reverse_iterator crbegin() const noexcept; +const_reverse_iterator crbegin() const noexcept; // (1) C++11 +constexpr const_reverse_iterator crbegin() const noexcept; // (1) C++26 ``` @@ -57,3 +58,7 @@ int main() | [`crend`](crend.md) | 先頭の前を指す読み取り専用逆イテレータを取得する | | [`cbegin`](cbegin.md) | 先頭を指す読み取り専用イテレータを取得する | | [`cend`](cend.md) | 末尾の次を指す読み取り専用イテレータを取得する | + + +## 参照 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/set/set/crend.md b/reference/set/set/crend.md index 4a66c7f05c..b4e87baa9b 100644 --- a/reference/set/set/crend.md +++ b/reference/set/set/crend.md @@ -6,7 +6,8 @@ * cpp11[meta cpp] ```cpp -const_reverse_iterator crend() const noexcept; +const_reverse_iterator crend() const noexcept; // (1) C++11 +constexpr const_reverse_iterator crend() const noexcept; // (1) C++26 ``` @@ -53,3 +54,7 @@ int main() | [`crbegin`](crbegin.md) | 末尾を指す読み取り専用逆イテレータを返す | | [`cbegin`](cbegin.md) | 先頭を指す読み取り専用イテレータを返す | | [`cend`](cend.md) | 末尾の次を指す読み取り専用イテレータを返す | + + +## 参照 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/set/set/emplace.md b/reference/set/set/emplace.md index 6b3d642552..e576806284 100644 --- a/reference/set/set/emplace.md +++ b/reference/set/set/emplace.md @@ -7,7 +7,9 @@ ```cpp template -pair emplace(Args&&... args); +pair emplace(Args&&... args); // (1) C++11 +template +constexpr pair emplace(Args&&... args); // (1) C++26 ``` ## 概要 @@ -82,3 +84,4 @@ int main() ## 参照 - [N2680 Proposed Wording for Placement Insert (Revision 1)](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2680.pdf) +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/set/set/emplace_hint.md b/reference/set/set/emplace_hint.md index d63bcaa591..c5c97972de 100644 --- a/reference/set/set/emplace_hint.md +++ b/reference/set/set/emplace_hint.md @@ -7,7 +7,9 @@ ```cpp template -iterator emplace_hint(const_iterator hint, Args&&... args); +iterator emplace_hint(const_iterator hint, Args&&... args); // (1) C++11 +template +constexpr iterator emplace_hint(const_iterator hint, Args&&... args); // (1) C++26 ``` ## 概要 @@ -87,3 +89,4 @@ int main() ## 参照 - [N2680 Proposed Wording for Placement Insert (Revision 1)](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2680.pdf) +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/set/set/empty.md b/reference/set/set/empty.md index 988be85c91..90b526f17d 100644 --- a/reference/set/set/empty.md +++ b/reference/set/set/empty.md @@ -5,10 +5,10 @@ * function[meta id-type] ```cpp -bool empty() const; // C++03 -bool empty() const noexcept; // C++11 -[[nodiscard]] bool empty() const noexcept; // C++20 -bool empty() const noexcept; // C++26 +bool empty() const; // (1) C++03 +bool empty() const noexcept; // (1) C++11 +[[nodiscard]] bool empty() const noexcept; // (1) C++20 +constexpr bool empty() const noexcept; // (1) C++26 ``` ## 概要 @@ -64,3 +64,4 @@ int main () - C++20で`[[nodiscard]]`が付加された - [P2422R1 Remove `nodiscard` annotations from the standard library specification](https://open-std.org/jtc1/sc22/wg21/docs/papers/2024/p2422r1.html) - C++26で`[[nodiscard]]`指定が削除された +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/set/set/end.md b/reference/set/set/end.md index afa8ace6d6..4c043cc186 100644 --- a/reference/set/set/end.md +++ b/reference/set/set/end.md @@ -5,11 +5,13 @@ * function[meta id-type] ```cpp -iterator end(); // (1) C++03 -iterator end() noexcept; // (1) C++11 +iterator end(); // (1) C++03 +iterator end() noexcept; // (1) C++11 +constexpr iterator end() noexcept; // (1) C++26 -const_iterator end() const; // (2) C++03 -const_iterator end() const noexcept; // (2) C++11 +const_iterator end() const; // (2) C++03 +const_iterator end() const noexcept; // (2) C++11 +constexpr const_iterator end() const noexcept; // (2) C++26 ``` ## 概要 @@ -74,3 +76,7 @@ int main() | [`begin`](begin.md) | 先頭を指すイテレータを取得する | | [`rbegin`](rbegin.md) | 末尾を指す逆イテレータを取得する | | [`rend`](rend.md) | 先頭の前を指す逆イテレータを取得する | + + +## 参照 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/set/set/equal_range.md b/reference/set/set/equal_range.md index 46d9991015..99de979627 100644 --- a/reference/set/set/equal_range.md +++ b/reference/set/set/equal_range.md @@ -5,17 +5,29 @@ * function[meta id-type] ```cpp -pair equal_range(const key_type& x); // (1) +pair + equal_range(const key_type& x); // (1) C++03 +constexpr pair + equal_range(const key_type& x); // (1) C++26 template -pair equal_range(const K& x); // (2) C++14 +pair + equal_range(const K& x); // (2) C++14 +template +constexpr pair + equal_range(const K& x); // (2) C++26 pair - equal_range(const key_type& x) const; // (3) + equal_range(const key_type& x) const; // (3) C++03 +constexpr pair + equal_range(const key_type& x) const; // (3) C++26 template pair - equal_range(const K& x) const; // (4) C++14 + equal_range(const K& x) const; // (4) C++14 +template +constexpr pair + equal_range(const K& x) const; // (4) C++26 ``` ## 概要 @@ -76,3 +88,4 @@ B ## 参照 - [N3657 Adding heterogeneous comparison lookup to associative containers (rev 4)](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2013/n3657.htm) +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/set/set/erase.md b/reference/set/set/erase.md index b085dcdefa..af2cab3a9b 100644 --- a/reference/set/set/erase.md +++ b/reference/set/set/erase.md @@ -5,18 +5,24 @@ * function[meta id-type] ```cpp -void erase(iterator position); // (1) C++03 (C++11で一旦削除) -iterator erase(iterator position); // (1) C++17 +void erase(iterator position); // (1) C++03 (C++11で一旦削除) +iterator erase(iterator position); // (1) C++17 +constexpr iterator erase(iterator position); // (1) C++26 -iterator erase(const_iterator position); // (2) C++11 +iterator erase(const_iterator position); // (2) C++11 +constexpr iterator erase(const_iterator position); // (2) C++26 -size_type erase(const key_type& x); // (3) C++03 +size_type erase(const key_type& x); // (3) C++03 +constexpr size_type erase(const key_type& x); // (3) C++26 template -size_type erase(K&& x); // (4) C++23 +size_type erase(K&& x); // (4) C++23 +template +constexpr size_type erase(K&& x); // (4) C++26 -void erase(iterator first, iterator last); // (5) C++03 -iterator erase(const_iterator first, const_iterator last); // (5) C++11 +void erase(iterator first, iterator last); // (5) C++03 +iterator erase(const_iterator first, const_iterator last); // (5) C++11 +constexpr iterator erase(const_iterator first, const_iterator last); // (5) C++26 ``` @@ -173,3 +179,4 @@ int main() - C++17で、`erase(iterator)`を再追加 - [P2077R3 Heterogeneous erasure overloads for associative containers](https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2021/p2077r3.html) - C++23で、`template erase(K&& x)`のオーバーロードが追加された +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/set/set/erase_if_free.md b/reference/set/set/erase_if_free.md index 9011dbd30b..ce45131c6e 100644 --- a/reference/set/set/erase_if_free.md +++ b/reference/set/set/erase_if_free.md @@ -8,7 +8,10 @@ namespace std { template typename set::size_type - erase_if(set& c, Predicate pred); + erase_if(set& c, Predicate pred); // (1) C++20 + template + constexpr typename set::size_type + erase_if(set& c, Predicate pred); // (1) C++26 } ``` @@ -78,3 +81,4 @@ int main() ## 参照 - [P1209R0 Adopt consistent container erasure from Library Fundamentals 2](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2018/p1209r0.html) - [R1115R3 Improving the Return Value of Erase-Like Algorithms II: Free `erase`/`erase_if`](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2019/p1115r3.pdf) +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/set/set/extract.md b/reference/set/set/extract.md index c045064d74..8afc636e7c 100644 --- a/reference/set/set/extract.md +++ b/reference/set/set/extract.md @@ -6,12 +6,16 @@ * cpp17[meta cpp] ```cpp -node_type extract(const_iterator position); // (1) C++17 +node_type extract(const_iterator position); // (1) C++17 +constexpr node_type extract(const_iterator position); // (1) C++26 -node_type extract(const key_type& x); // (2) C++17 +node_type extract(const key_type& x); // (2) C++17 +constexpr node_type extract(const key_type& x); // (2) C++26 template -node_type extract(K&& x); // (3) C++23 +node_type extract(K&& x); // (3) C++23 +template +constexpr node_type extract(K&& x); // (3) C++26 ``` ## 概要 @@ -142,3 +146,4 @@ s2 = { 1, 2 } - [Splicing Maps and Sets(Revision 5)](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/p0083r3.pdf) - [P2077R3 Heterogeneous erasure overloads for associative containers](https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2021/p2077r3.html) - C++23で、`template extract(K&& x)`のオーバーロードが追加された +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/set/set/find.md b/reference/set/set/find.md index f8765cdd53..2f26041225 100644 --- a/reference/set/set/find.md +++ b/reference/set/set/find.md @@ -5,15 +5,21 @@ * function[meta id-type] ```cpp -iterator find(const key_type& x); // (1) +iterator find(const key_type& x); // (1) C++03 +constexpr iterator find(const key_type& x); // (1) C++26 template -iterator find(const K& x); // (2) C++14 +iterator find(const K& x); // (2) C++14 +template +constexpr iterator find(const K& x); // (2) C++26 -const_iterator find(const key_type& x) const; // (3) +const_iterator find(const key_type& x) const; // (3) C++03 +constexpr const_iterator find(const key_type& x) const; // (3) C++26 template -const_iterator find(const K& x) const; // (4) C++14 +const_iterator find(const K& x) const; // (4) C++14 +template +constexpr const_iterator find(const K& x) const; // (4) C++26 ``` ## 概要 @@ -95,3 +101,4 @@ Bob ## 参照 - [N3657 Adding heterogeneous comparison lookup to associative containers (rev 4)](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2013/n3657.htm) - [LWG Issue 2299. [CD] Effects of inaccessible `key_compare::is_transparent` type are not clear](http://www.open-std.org/jtc1/sc22/wg21/docs/lwg-defects.html#2299) +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/set/set/get_allocator.md b/reference/set/set/get_allocator.md index 52a82caab6..53294fac5f 100644 --- a/reference/set/set/get_allocator.md +++ b/reference/set/set/get_allocator.md @@ -5,8 +5,9 @@ * function[meta id-type] ```cpp -allocator_type get_allocator() const; // C++03 -allocator_type get_allocator() const noexcept; // C++11 +allocator_type get_allocator() const; // (1) C++03 +allocator_type get_allocator() const noexcept; // (1) C++11 +constexpr allocator_type get_allocator() const noexcept; // (1) C++26 ``` ## 概要 @@ -66,3 +67,7 @@ int main() - [Visual C++](/implementation.md#visual_cpp): 2002 [mark verified], 2003 [mark verified], 2005 [mark verified], 2008 [mark verified], 2010 [mark verified], 2012 [mark verified], 2013 [mark verified], 2015 [mark verified], 2017 [mark verified] - 2012, 2013は、`noexcept`が実装されていないため、`throw()`が修飾されている。 - 2015からは、`noexcept`が修飾されている。 + + +## 参照 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/set/set/insert.md b/reference/set/set/insert.md index 6284243c07..d5a28d5375 100644 --- a/reference/set/set/insert.md +++ b/reference/set/set/insert.md @@ -6,26 +6,37 @@ ```cpp pair insert(const value_type& x); // (1) C++03 -pair insert(value_type&& y); // (2) C++11 +constexpr pair insert(const value_type& x); // (1) C++26 + +pair insert(value_type&& y); // (2) C++11 +constexpr pair insert(value_type&& y); // (2) C++26 template -pair insert(K&& x); // (3) C++26 +constexpr pair insert(K&& x); // (3) C++26 -iterator insert(iterator hint, const value_type& x); // (4) C++03 -iterator insert(const_iterator hint, const value_type& x); // (4) C++11 +iterator insert(iterator hint, const value_type& x); // (4) C++03 +iterator insert(const_iterator hint, const value_type& x); // (4) C++11 +constexpr iterator insert(const_iterator hint, const value_type& x); // (4) C++26 -iterator insert(const_iterator hint, value_type&& y); // (5) C++11 +iterator insert(const_iterator hint, value_type&& y); // (5) C++11 +constexpr iterator insert(const_iterator hint, value_type&& y); // (5) C++26 template -iterator insert(const_iterator hint, K&& x); // (6) C++26 +constexpr iterator insert(const_iterator hint, K&& x); // (6) C++26 template -void insert(InputIterator first, InputIterator last); // (7) C++03 +void insert(InputIterator first, InputIterator last); // (7) C++03 +template +constexpr void insert(InputIterator first, InputIterator last); // (7) C++26 + +void insert(initializer_list init); // (8) C++03 +constexpr void insert(initializer_list init); // (8) C++26 -void insert(initializer_list init); // (8) C++03 +insert_return_type insert(node_type&& nh); // (9) C++17 +constexpr insert_return_type insert(node_type&& nh); // (9) C++26 -insert_return_type insert(node_type&& nh); // (9) C++17 -iterator insert(const_iterator hint, node_type&& nh); // (10) C++17 +iterator insert(const_iterator hint, node_type&& nh); // (10) C++17 +constexpr iterator insert(const_iterator hint, node_type&& nh); // (10) C++26 ``` * initializer_list[link /reference/initializer_list/initializer_list.md] @@ -133,3 +144,4 @@ int main () - C++17で導入されたノード挿入(9), (10)の経緯となる提案文書 - [P2363R5: Extending associative containers with the remaining heterogeneous overloads](https://open-std.org/jtc1/sc22/wg21/docs/papers/2023/p2363r5.html) - C++26で`template `のバージョンが追加された +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/set/set/insert_range.md b/reference/set/set/insert_range.md index e5e6becf34..3dfb79b035 100644 --- a/reference/set/set/insert_range.md +++ b/reference/set/set/insert_range.md @@ -7,7 +7,9 @@ ```cpp template R> -void insert_range(R&& rg); // C++23 +void insert_range(R&& rg); // (1) C++23 +template R> +constexpr void insert_range(R&& rg); // (1) C++26 ``` ## 概要 @@ -62,3 +64,7 @@ int main () | 名前 | 説明 | |----------------------------|------------------------| | [`insert`](insert.md) | 要素を挿入する | + + +## 参照 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/set/set/key_comp.md b/reference/set/set/key_comp.md index 25f79a254b..e605de14d2 100644 --- a/reference/set/set/key_comp.md +++ b/reference/set/set/key_comp.md @@ -5,7 +5,8 @@ * function[meta id-type] ```cpp -key_compare key_comp() const; +key_compare key_comp() const; // (1) C++03 +constexpr key_compare key_comp() const; // (1) C++26 ``` ## 概要 @@ -53,3 +54,7 @@ int main() | [`count`](count.md) | 指定したキーにマッチする要素の数を返す | | [`lower_bound`](lower_bound.md) | 与えられた値より小さく無い最初の要素へのイテレータを返す | | [`upper_bound`](upper_bound.md) | 特定の値よりも大きい最初の要素へのイテレータを返す | + + +## 参照 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/set/set/lower_bound.md b/reference/set/set/lower_bound.md index 48e2f50d40..75fad22b49 100644 --- a/reference/set/set/lower_bound.md +++ b/reference/set/set/lower_bound.md @@ -5,15 +5,21 @@ * function[meta id-type] ```cpp -iterator lower_bound(const key_type& x); // (1) +iterator lower_bound(const key_type& x); // (1) C++03 +constexpr iterator lower_bound(const key_type& x); // (1) C++26 template -iterator lower_bound(const K& x); // (2) C++14 +iterator lower_bound(const K& x); // (2) C++14 +template +constexpr iterator lower_bound(const K& x); // (2) C++26 -const_iterator lower_bound(const key_type& x) const; // (3) +const_iterator lower_bound(const key_type& x) const; // (3) C++03 +constexpr const_iterator lower_bound(const key_type& x) const; // (3) C++26 template -const_iterator lower_bound(const K& x) const; // (4) C++14 +const_iterator lower_bound(const K& x) const; // (4) C++14 +template +constexpr const_iterator lower_bound(const K& x) const; // (4) C++26 ``` ## 概要 @@ -107,3 +113,4 @@ D ## 参照 - [N3657 Adding heterogeneous comparison lookup to associative containers (rev 4)](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2013/n3657.htm) +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/set/set/max_size.md b/reference/set/set/max_size.md index bf6685eea3..3e9f420fd1 100644 --- a/reference/set/set/max_size.md +++ b/reference/set/set/max_size.md @@ -5,8 +5,9 @@ * function[meta id-type] ```cpp -size_type max_size() const; // C++03 -size_type max_size() const noexcept; // C++11 +size_type max_size() const; // (1) C++03 +size_type max_size() const noexcept; // (1) C++11 +constexpr size_type max_size() const noexcept; // (1) C++26 ``` ## 概要 @@ -47,3 +48,7 @@ int main () | 名前 | 説明 | |---------------------|------------------| | [`size`](size.md) | 要素数を取得する | + + +## 参照 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/set/set/merge.md b/reference/set/set/merge.md index ca5bb9db26..a973d30acb 100644 --- a/reference/set/set/merge.md +++ b/reference/set/set/merge.md @@ -7,13 +7,24 @@ ```cpp template - void merge(set& source); // (1) +void merge(set& source); // (1) C++17 template - void merge(set&& source); // (2) +constexpr void merge(set& source); // (1) C++26 + +template +void merge(set&& source); // (2) C++17 +template +constexpr void merge(set&& source); // (2) C++26 + +template +void merge(multiset& source); // (3) C++17 +template +constexpr void merge(multiset& source); // (3) C++26 + template - void merge(multiset& source); // (3) +void merge(multiset&& source); // (4) C++17 template - void merge(multiset&& source); // (4) +constexpr void merge(multiset&& source); // (4) C++26 ``` ## 概要 @@ -88,3 +99,4 @@ s2 = { 10, 20, 30 } ## 参照 - [Splicing Maps and Sets(Revision 5)](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/p0083r3.pdf) +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/set/set/op_assign.md b/reference/set/set/op_assign.md index ea6aabf4a2..6869c912ba 100644 --- a/reference/set/set/op_assign.md +++ b/reference/set/set/op_assign.md @@ -5,12 +5,19 @@ * function[meta id-type] ```cpp -set& operator=(const set& x); // (1) C++03 -set& operator=(set&& x); // (2) C++11 +set& operator=(const set& x); // (1) C++03 +constexpr set& operator=(const set& x); // (1) C++26 + +set& operator=(set&& x); // (2) C++11 set& operator=(set&& x) noexcept(allocator_traits::is_always_equal::value && is_nothrow_move_assignable::value); // (2) C++17 -set& operator=(initializer_list init); // (3) C++11 +constexpr set& operator=(set&& x) + noexcept(allocator_traits::is_always_equal::value + && is_nothrow_move_assignable::value); // (2) C++26 + +set& operator=(initializer_list init); // (3) C++11 +constexpr set& operator=(initializer_list init); // (3) C++26 ``` * initializer_list[link ../../initializer_list.md] @@ -82,3 +89,4 @@ Size of c2: 6 - [N2679 Initializer Lists for Standard Containers(Revision 1)](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2679.pdf) - [N4258 Cleaning-up noexcept in the Library, Rev 3](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n4258.pdf) - `noexcept` 追加の経緯となる提案文書 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/set/set/op_compare_3way.md b/reference/set/set/op_compare_3way.md index f76dfad5b0..6aac88de4d 100644 --- a/reference/set/set/op_compare_3way.md +++ b/reference/set/set/op_compare_3way.md @@ -10,6 +10,10 @@ namespace std { synth-three-way-result operator<=>(const set& x, const set& y); // (1) C++20 + template + constexpr synth-three-way-result + operator<=>(const set& x, + const set& y); // (1) C++26 } ``` @@ -85,3 +89,4 @@ int main() ## 参照 - [P1614R2 The Mothership has Landed](https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2019/p1614r2.html) - C++20での三方比較演算子の追加と、関連する演算子の自動導出 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/set/set/op_constructor.md b/reference/set/set/op_constructor.md index 51a2b731da..16d8d4a60a 100644 --- a/reference/set/set/op_constructor.md +++ b/reference/set/set/op_constructor.md @@ -5,50 +5,97 @@ * function[meta id-type] ```cpp -set(); // (1) C++14 +set(); // (1) C++14 +constexpr set(); // (1) C++26 explicit set(const Compare& comp, - const Allocator& = Allocator()); // (2) C++14 + const Allocator& = Allocator()); // (2) C++14 +constexpr explicit + set(const Compare& comp, + const Allocator& = Allocator()); // (2) C++26 -explicit set(const Compare& comp = Compare(), - const Allocator& alloc = Allocator()); // (1) + (2) C++03 +explicit + set(const Compare& comp = Compare(), + const Allocator& alloc = Allocator()); // (1) + (2) C++03 -explicit set(const Allocator& alloc); // (3) C++11 +explicit set(const Allocator& alloc); // (3) C++11 +constexpr explicit set(const Allocator& alloc); // (3) C++26 template -set(InputIterator first, InputIterator last, +set(InputIterator first, + InputIterator last, const Compare& comp = Compare(), - const Allocator& alloc = Allocator()); // (4) C++03 + const Allocator& alloc = Allocator()); // (4) C++03 +template +constexpr + set(InputIterator first, + InputIterator last, + const Compare& comp = Compare(), + const Allocator& alloc = Allocator()); // (4) C++26 template -set(InputIterator first, InputIterator last, - const Allocator& a); // (5) C++14 +set(InputIterator first, + InputIterator last, + const Allocator& a); // (5) C++14 +template +constexpr + set(InputIterator first, + InputIterator last, + const Allocator& a); // (5) C++26 + +set(const set& x); // (6) C++03 +constexpr set(const set& x); // (6) C++26 -set(const set& x); // (6) C++03 -set(set&& y); // (7) C++11 +set(set&& y); // (7) C++11 +constexpr set(set&& y); // (7) C++26 -set(const set& x, const Allocator& alloc); // (8) C++11 set(const set& x, - const type_identity_t& alloc); // (8) C++23 + const Allocator& alloc); // (8) C++11 +set(const set& x, + const type_identity_t& alloc); // (8) C++23 +constexpr + set(const set& x, + const type_identity_t& alloc); // (8) C++26 -set(set&& y, const Allocator& alloc); // (9) C++11 -set(set&& y, const type_identity_t& alloc); // (9) C++23 +set(set&& y, const Allocator& alloc); // (9) C++11 +set(set&& y, const type_identity_t& alloc); // (9) C++23 +constexpr set(set&& y, const type_identity_t& alloc); // (9) C++26 set(initializer_list init, const Compare& comp = Compare(), - const Allocator& alloc = Allocator()); // (10) C++11 + const Allocator& alloc = Allocator()); // (10) C++11 +constexpr + set(initializer_list init, + const Compare& comp = Compare(), + const Allocator& alloc = Allocator()); // (10) C++26 set(initializer_list init, - const Allocator& a); // (11) C++14 + const Allocator& a); // (11) C++14 +constexpr + set(initializer_list init, + const Allocator& a); // (11) C++26 template R> -set(from_range_t, R&& rg, +set(from_range_t, + R&& rg, const Compare& comp = Compare(), - const Allocator& alloc = Allocator()); // (12) C++23 + const Allocator& alloc = Allocator()); // (12) C++23 +template R> +constexpr + set(from_range_t, + R&& rg, + const Compare& comp = Compare(), + const Allocator& alloc = Allocator()); // (12) C++26 template R> -set(from_range_t, R&& rg, - const Allocator& alloc); // (13) C++23 +set(from_range_t, + R&& rg, + const Allocator& alloc); // (13) C++23 +template R> +constexpr + set(from_range_t, + R&& rg, + const Allocator& alloc); // (13) C++26 ``` * type_identity_t[link /reference/type_traits/type_identity.md] * initializer_list[link ../../initializer_list.md] @@ -163,3 +210,4 @@ Size of c2: 6 なお、Discussion の例はアロケータの型が誤っているので注意 - [P1518R2 Stop Overconstraining Allocators in Container Deduction Guides](https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2021/p1518r2.html) - C++23でのアロケータ引数を`type_identity_t`で包む変更 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/set/set/op_destructor.md b/reference/set/set/op_destructor.md index 4136f65db5..c0431472dd 100644 --- a/reference/set/set/op_destructor.md +++ b/reference/set/set/op_destructor.md @@ -5,7 +5,8 @@ * function[meta id-type] ```cpp -~set(); +~set(); // (1) C++03 +constexpr ~set(); // (1) C++26 ``` ## 概要 @@ -14,3 +15,7 @@ ## 計算量 [`size()`](size.md) に対して線形時間(デストラクタ呼び出し) + + +## 参照 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/set/set/op_equal.md b/reference/set/set/op_equal.md index 187e927cbf..1ff17f5601 100644 --- a/reference/set/set/op_equal.md +++ b/reference/set/set/op_equal.md @@ -9,6 +9,10 @@ namespace std { bool operator==(const set& x, const set& y); // (1) C++03 + template + constexpr bool + operator==(const set& x, + const set& y); // (1) C++26 } ``` @@ -65,3 +69,4 @@ int main() - C++14から、2つ目のイテレータ範囲のendイテレータをとる`equal()`アルゴリズムを使用するようになった。 - [P1614R2 The Mothership has Landed](https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2019/p1614r2.html) - C++20での三方比較演算子の追加と、関連する演算子の自動導出 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/set/set/op_greater.md b/reference/set/set/op_greater.md index 040d0c5c7c..edfc1a303e 100644 --- a/reference/set/set/op_greater.md +++ b/reference/set/set/op_greater.md @@ -10,6 +10,10 @@ namespace std { bool operator>(const set& x, const set& y); // (1) C++03 + template + constexpr bool + operator>(const set& x, + const set& y); // (1) C++26 } ``` @@ -63,3 +67,4 @@ int main() ## 参照 - [P1614R2 The Mothership has Landed](https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2019/p1614r2.html) - C++20での三方比較演算子の追加と、関連する演算子の自動導出 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/set/set/op_greater_equal.md b/reference/set/set/op_greater_equal.md index 616144e9fb..5d6acc65d9 100644 --- a/reference/set/set/op_greater_equal.md +++ b/reference/set/set/op_greater_equal.md @@ -10,6 +10,10 @@ namespace std { bool operator>=(const set& x, const set& y); // (1) C++03 + template + constexpr bool + operator>=(const set& x, + const set& y); // (1) C++26 } ``` @@ -63,3 +67,4 @@ int main() ## 参照 - [P1614R2 The Mothership has Landed](https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2019/p1614r2.html) - C++20での三方比較演算子の追加と、関連する演算子の自動導出 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/set/set/op_less.md b/reference/set/set/op_less.md index feb55fb296..a056976a09 100644 --- a/reference/set/set/op_less.md +++ b/reference/set/set/op_less.md @@ -10,6 +10,10 @@ namespace std { bool operator<(const set& x, const set& y); // (1) C++03 + template + constexpr bool + operator<(const set& x, + const set& y); // (1) C++26 } ``` @@ -61,3 +65,4 @@ true ## 参照 - [P1614R2 The Mothership has Landed](https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2019/p1614r2.html) - C++20での三方比較演算子の追加と、関連する演算子の自動導出 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/set/set/op_less_equal.md b/reference/set/set/op_less_equal.md index a16faa12ed..388f0acfd2 100644 --- a/reference/set/set/op_less_equal.md +++ b/reference/set/set/op_less_equal.md @@ -10,6 +10,10 @@ namespace std { bool operator<=(const set& x, const set& y); // (1) C++03 + template + constexpr bool + operator<=(const set& x, + const set& y); // (1) C++26 } ``` @@ -63,3 +67,4 @@ int main() ## 参照 - [P1614R2 The Mothership has Landed](https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2019/p1614r2.html) - C++20での三方比較演算子の追加と、関連する演算子の自動導出 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/set/set/op_not_equal.md b/reference/set/set/op_not_equal.md index 148d3ccc99..3ad8c0ef09 100644 --- a/reference/set/set/op_not_equal.md +++ b/reference/set/set/op_not_equal.md @@ -10,6 +10,10 @@ namespace std { bool operator!=(const set& x, const set& y); // (1) C++03 + template + constexpr bool + operator!=(const set& x, + const set& y); // (1) C++26 } ``` @@ -63,3 +67,4 @@ int main() ## 参照 - [P1614R2 The Mothership has Landed](https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2019/p1614r2.html) - C++20での三方比較演算子の追加と、関連する演算子の自動導出 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/set/set/rbegin.md b/reference/set/set/rbegin.md index 05e9ff5f0d..5842141e06 100644 --- a/reference/set/set/rbegin.md +++ b/reference/set/set/rbegin.md @@ -5,11 +5,13 @@ * function[meta id-type] ```cpp -reverse_iterator rbegin(); // (1) C++03 -reverse_iterator rbegin() noexcept; // (1) C++11 +reverse_iterator rbegin(); // (1) C++03 +reverse_iterator rbegin() noexcept; // (1) C++11 +constexpr reverse_iterator rbegin() noexcept; // (1) C++26 -const_reverse_iterator rbegin() const; // (2) C++03 -const_reverse_iterator rbegin() const noexcept; // (2) C++11 +const_reverse_iterator rbegin() const; // (2) C++03 +const_reverse_iterator rbegin() const noexcept; // (2) C++11 +constexpr const_reverse_iterator rbegin() const noexcept; // (2) C++26 ``` @@ -69,3 +71,7 @@ int main() | [`rend`](rend.md) | 先頭の前を指す逆イテレータを取得する | | [`begin`](begin.md) | 先頭を指すイテレータを取得する | | [`end`](end.md) | 末尾の次を指すイテレータを取得する | + + +## 参照 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/set/set/rend.md b/reference/set/set/rend.md index 62b0ea8278..68be86fc2f 100644 --- a/reference/set/set/rend.md +++ b/reference/set/set/rend.md @@ -5,11 +5,13 @@ * function[meta id-type] ```cpp -reverse_iterator rend(); // (1) C++03 -reverse_iterator rend() noexcept; // (1) C++11 +reverse_iterator rend(); // (1) C++03 +reverse_iterator rend() noexcept; // (1) C++11 +constexpr reverse_iterator rend() noexcept; // (1) C++26 -const_reverse_iterator rend() const; // (2) C++03 -const_reverse_iterator rend() const noexcept; // (2) C++11 +const_reverse_iterator rend() const; // (2) C++03 +const_reverse_iterator rend() const noexcept; // (2) C++11 +constexpr const_reverse_iterator rend() const noexcept; // (2) C++26 ``` @@ -63,3 +65,7 @@ int main() | [`rbegin`](rbegin.md) | 末尾を指す逆イテレータを返す | | [`begin`](begin.md) | 先頭を指すイテレータを返す | | [`end`](end.md) | 末尾の次を指すイテレータを返す | + + +## 参照 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/set/set/size.md b/reference/set/set/size.md index ecaa35ab49..e46b73b866 100644 --- a/reference/set/set/size.md +++ b/reference/set/set/size.md @@ -5,8 +5,9 @@ * function[meta id-type] ```cpp -size_type size() const; // C++03 -size_type size() const noexcept; // C++11 +size_type size() const; // (1) C++03 +size_type size() const noexcept; // (1) C++11 +constexpr size_type size() const noexcept; // (1) C++26 ``` ## 概要 @@ -56,3 +57,7 @@ int main () |-----------------------------|------------------------------------| | [`max_size`](max_size.md) | 格納可能な最大の要素数を取得する | | [`empty`](empty.md) | コンテナが空であるかどうかを調べる | + + +## 参照 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/set/set/swap.md b/reference/set/set/swap.md index a1ceb2590c..3ec8e6f912 100644 --- a/reference/set/set/swap.md +++ b/reference/set/set/swap.md @@ -5,10 +5,13 @@ * function[meta id-type] ```cpp -void swap(set& st); +void swap(set& st); // (1) C++03 void swap(set& x) noexcept(allocator_traits::is_always_equal::value - && noexcept(swap(declval(),declval()))); // C++17 + && noexcept(swap(declval(),declval()))); // (1) C++17 +constexpr void swap(set& x) + noexcept(allocator_traits::is_always_equal::value + && noexcept(swap(declval(),declval()))); // (1) C++26 ``` ## 概要 @@ -63,3 +66,4 @@ int main() ## 参照 - [N4258 Cleaning-up noexcept in the Library, Rev 3](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n4258.pdf) - `noexcept` 追加の経緯となる提案文書 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/set/set/swap_free.md b/reference/set/set/swap_free.md index 2924917502..ad0d2263d6 100644 --- a/reference/set/set/swap_free.md +++ b/reference/set/set/swap_free.md @@ -6,13 +6,19 @@ ```cpp namespace std { template - void swap(set& x, - set& y); - + void + swap(set& x, + set& y); // (1) C++03 + template + void + swap(set& x, + set& y) + noexcept(noexcept(x.swap(y))); // (1) C++17 template - void swap(set& x, - set& y) - noexcept(noexcept(x.swap(y))); // C++17 + constexpr void + swap(set& x, + set& y) + noexcept(noexcept(x.swap(y))); // (1) C++26 } ``` @@ -68,3 +74,4 @@ int main() ## 参照 - [N4258 Cleaning-up noexcept in the Library, Rev 3](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n4258.pdf) - `noexcept` 追加の経緯となる提案文書 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/set/set/upper_bound.md b/reference/set/set/upper_bound.md index 2d8fd61d1a..8db12e7d5c 100644 --- a/reference/set/set/upper_bound.md +++ b/reference/set/set/upper_bound.md @@ -5,15 +5,21 @@ * function[meta id-type] ```cpp -iterator upper_bound(const key_type& x); // (1) +iterator upper_bound(const key_type& x); // (1) C++03 +constexpr iterator upper_bound(const key_type& x); // (1) C++26 template -iterator upper_bound(const K& x); // (2) C++14 +iterator upper_bound(const K& x); // (2) C++14 +template +constexpr iterator upper_bound(const K& x); // (2) C++26 -const_iterator upper_bound(const key_type& x) const; // (3) +const_iterator upper_bound(const key_type& x) const; // (3) C++03 +constexpr const_iterator upper_bound(const key_type& x) const; // (3) C++26 template -const_iterator upper_bound(const K& x) const; // (4) C++14 +const_iterator upper_bound(const K& x) const; // (4) C++14 +template +constexpr const_iterator upper_bound(const K& x) const; // (4) C++26 ``` ## 概要 @@ -107,3 +113,4 @@ D ## 参照 - [N3657 Adding heterogeneous comparison lookup to associative containers (rev 4)](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2013/n3657.htm) +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/set/set/value_comp.md b/reference/set/set/value_comp.md index ad583b2250..4ddf7ede20 100644 --- a/reference/set/set/value_comp.md +++ b/reference/set/set/value_comp.md @@ -5,7 +5,8 @@ * function[meta id-type] ```cpp -value_compare value_comp() const; +value_compare value_comp() const; // (1) C++03 +constexpr value_compare value_comp() const; // (1) C++26 ``` ## 概要 @@ -54,3 +55,7 @@ int main() | [`count`](count.md) | 指定したキーにマッチする要素の数を返す | | [`lower_bound`](lower_bound.md) | 与えられた値より小さくない最初の要素へのイテレータを返す | | [`upper_bound`](upper_bound.md) | 特定の値よりも大きい最初の要素へのイテレータを返す | + + +## 参照 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/stack/stack/emplace.md b/reference/stack/stack/emplace.md index 83694b65d3..75ebc2a441 100644 --- a/reference/stack/stack/emplace.md +++ b/reference/stack/stack/emplace.md @@ -7,10 +7,11 @@ ```cpp template -void emplace(Args&&... args); // C++14 まで - +void emplace(Args&&... args); // (1) C++11 +template +decltype(auto) emplace(Args&&... args); // (1) C++17 template -decltype(auto) emplace(Args&&... args); // C++17 から +constexpr decltype(auto) emplace(Args&&... args); // (1) C++26 ``` ## 概要 @@ -96,3 +97,4 @@ C++17 規格が発行された段階では戻り値型が `reference` に変更 - [P0084R1 Emplace Return Type (Revision 1)](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/p0084r1.pdf) - [P0084R2 Emplace Return Type (Revision 2)](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/p0084r2.pdf) - [LWG Issue 2783. stack::emplace() and queue::emplace() should return decltype(auto)](https://wg21.cmeerw.net/lwg/issue2783) +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/stack/stack/empty.md b/reference/stack/stack/empty.md index 1d58dc05eb..009b3e53d9 100644 --- a/reference/stack/stack/empty.md +++ b/reference/stack/stack/empty.md @@ -5,9 +5,9 @@ * function[meta id-type] ```cpp -bool empty() const; // C++03 -[[nodiscard]] bool empty() const; // C++20 -bool empty() const; // C++26 +bool empty() const; // (1) C++03 +[[nodiscard]] bool empty() const; // (1) C++20 +constexpr bool empty() const; // (1) C++26 ``` ## 概要 @@ -78,3 +78,4 @@ bool empty() const { return c.empty(); } - C++20で`[[nodiscard]]`が付加された - [P2422R1 Remove `nodiscard` annotations from the standard library specification](https://open-std.org/jtc1/sc22/wg21/docs/papers/2024/p2422r1.html) - C++26で`[[nodiscard]]`指定が削除された +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/stack/stack/op_assign.md b/reference/stack/stack/op_assign.md index 1906a194df..be5dc457ae 100644 --- a/reference/stack/stack/op_assign.md +++ b/reference/stack/stack/op_assign.md @@ -5,8 +5,11 @@ * function[meta id-type] ```cpp -stack& operator=(const stack& st); // (1) -stack& operator=(stack&& st); // (2) C++11 +stack& operator=(const stack& st); // (1) C++03 +constexpr stack& operator=(const stack& st); // (1) C++26 + +stack& operator=(stack&& st); // (2) C++11 +constexpr stack& operator=(stack&& st); // (2) C++26 ``` ## 概要 @@ -65,3 +68,7 @@ int main() | 名前 | 説明 | |--------------------------------------------------------------------------------------------|-----------------------------------------------------| | [`(constructor)`](op_constructor.md) | コンストラクタ | + + +## 参照 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/stack/stack/op_compare_3way.md b/reference/stack/stack/op_compare_3way.md index f481edf6ed..aee15ab3d3 100644 --- a/reference/stack/stack/op_compare_3way.md +++ b/reference/stack/stack/op_compare_3way.md @@ -9,6 +9,10 @@ namespace std { compare_three_way_result_t operator<=>(const stack& x, const stack& y); // (1) C++20 + template + constexpr compare_three_way_result_t + operator<=>(const stack& x, + const stack& y); // (1) C++26 } ``` @@ -59,3 +63,4 @@ int main() ## 参照 - [P1614R2 The Mothership has Landed](https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2019/p1614r2.html) - C++20での三方比較演算子の追加と、関連する演算子の自動導出 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/stack/stack/op_constructor.md b/reference/stack/stack/op_constructor.md index f173b91cad..3b43a689e0 100644 --- a/reference/stack/stack/op_constructor.md +++ b/reference/stack/stack/op_constructor.md @@ -6,43 +6,66 @@ ```cpp // C++03まで -explicit stack(const Container& cont = Container()); // (1), (2) +explicit stack(const Container& cont = Container()); // (1), (2) // C++11以降 C++17まで -explicit stack(const Container& cont); // (2) -explicit stack(Container&& cont = Container()); // (1), (3) +explicit stack(const Container& cont); // (2) +explicit stack(Container&& cont = Container()); // (1), (3) // C++20以降 -stack() : stack(Container()) {} // (1) -explicit stack(const Container&); // (2) -explicit stack(Container&&); // (3) +stack() : stack(Container()) {} // (1) +constexpr stack() : stack(Container()) {} // (1) C++26 +explicit stack(const Container&); // (2) +constexpr explicit stack(const Container&); // (2) C++26 + +explicit stack(Container&&); // (3) +constexpr explicit stack(Container&&); // (3) C++26 + +template +stack(InputIterator first, InputIterator last); // (4) C++23 template -stack(InputIterator first, InputIterator last); // (4) C++23 +constexpr stack(InputIterator first, InputIterator last); // (4) C++26 template -explicit stack(const Allocator& alloc); // (5) C++11 +explicit stack(const Allocator& alloc); // (5) C++11 +template +constexpr explicit stack(const Allocator& alloc); // (5) C++26 template -stack(const Container& cont, const Allocator& alloc); // (6) C++11 +stack(const Container& cont, const Allocator& alloc); // (6) C++11 +template +constexpr stack(const Container& cont, const Allocator& alloc); // (6) C++26 template -stack(Container&& cont, const Allocator& alloc); // (7) C++11 +stack(Container&& cont, const Allocator& alloc); // (7) C++11 +template +constexpr stack(Container&& cont, const Allocator& alloc); // (7) C++26 template -stack(const stack& st, const Allocator& alloc); // (8) C++11 +stack(const stack& st, const Allocator& alloc); // (8) C++11 +template +constexpr stack(const stack& st, const Allocator& alloc); // (8) C++26 template -stack(stack&& st, const Allocator& alloc); // (9) C++11 +stack(stack&& st, const Allocator& alloc); // (9) C++11 +template +constexpr stack(stack&& st, const Allocator& alloc); // (9) C++26 template -stack(InputIterator first, InputIterator last, const Alloc&); // (10) C++23 +stack(InputIterator first, InputIterator last, const Alloc&); // (10) C++23 +template +constexpr stack(InputIterator first, InputIterator last, const Alloc&); // (10) C++26 template R> -stack(from_range_t, R&& rg); // (11) C++23 +stack(from_range_t, R&& rg); // (11) C++23 +template R> +constexpr stack(from_range_t, R&& rg); // (11) C++26 template R, class Alloc> -stack(from_range_t, R&& rg, const Alloc& alloc); // (12) C++23 +stack(from_range_t, R&& rg, const Alloc& alloc); // (12) C++23 +template R, class Alloc> +constexpr stack(from_range_t, R&& rg, const Alloc& alloc); // (12) C++26 ``` * from_range_t[link ../../ranges/from_range_t.md] @@ -117,3 +140,4 @@ int main() - C++20でのデフォルトコンストラクタの分離 - [P1425R4 Iterators pair constructors for stack and queue](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2021/p1425r4.pdf) - C++23でのイテレータペアへの対応 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/stack/stack/op_destructor.md b/reference/stack/stack/op_destructor.md index f2fe2c9b58..b6d84ae6a8 100644 --- a/reference/stack/stack/op_destructor.md +++ b/reference/stack/stack/op_destructor.md @@ -5,7 +5,8 @@ * function[meta id-type] ```cpp -~stack(); +~stack(); // (1) C++03 +constexpr ~stack(); // (1) C++26 ``` ## 概要 @@ -14,3 +15,7 @@ stack コンテナアダプタのオブジェクトを破棄する。 ## 計算量 線形時間 O(n) (全要素のデストラクタ呼び出し) + + +## 参照 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/stack/stack/op_equal.md b/reference/stack/stack/op_equal.md index 535570e10b..d4b8291324 100644 --- a/reference/stack/stack/op_equal.md +++ b/reference/stack/stack/op_equal.md @@ -6,7 +6,9 @@ ```cpp namespace std { template - bool operator==(const stack& x, const stack& y); + bool operator==(const stack& x, const stack& y); // (1) C++03 + template + constexpr bool operator==(const stack& x, const stack& y); // (1) C++26 } ``` @@ -46,3 +48,4 @@ true ``` ## 参照 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/stack/stack/op_greater.md b/reference/stack/stack/op_greater.md index 58d7e002c4..f3ed7e8282 100644 --- a/reference/stack/stack/op_greater.md +++ b/reference/stack/stack/op_greater.md @@ -6,7 +6,9 @@ ```cpp namespace std { template - bool operator> (const stack& x, const stack& y); + bool operator> (const stack& x, const stack& y); // (1) C++03 + template + constexpr bool operator> (const stack& x, const stack& y); // (1) C++26 } ``` @@ -46,3 +48,4 @@ false ``` ## 参照 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/stack/stack/op_greater_equal.md b/reference/stack/stack/op_greater_equal.md index 8b65ff5238..45c28675ff 100644 --- a/reference/stack/stack/op_greater_equal.md +++ b/reference/stack/stack/op_greater_equal.md @@ -6,7 +6,9 @@ ```cpp namespace std { template - bool operator>=(const stack& x, const stack& y); + bool operator>=(const stack& x, const stack& y); // (1) C++03 + template + constexpr bool operator>=(const stack& x, const stack& y); // (1) C++26 } ``` @@ -46,3 +48,4 @@ false ``` ## 参照 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/stack/stack/op_less.md b/reference/stack/stack/op_less.md index 34ee98ce25..ac1165547b 100644 --- a/reference/stack/stack/op_less.md +++ b/reference/stack/stack/op_less.md @@ -6,7 +6,9 @@ ```cpp namespace std { template - bool operator< (const stack& x, const stack& y); + bool operator< (const stack& x, const stack& y); // (1) C++03 + template + constexpr bool operator< (const stack& x, const stack& y); // (1) C++26 } ``` @@ -46,3 +48,4 @@ true ``` ## 参照 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/stack/stack/op_less_equal.md b/reference/stack/stack/op_less_equal.md index cf11c43bb8..0b70ff9653 100644 --- a/reference/stack/stack/op_less_equal.md +++ b/reference/stack/stack/op_less_equal.md @@ -6,7 +6,9 @@ ```cpp namespace std { template - bool operator<=(const stack& x, const stack& y); + bool operator<=(const stack& x, const stack& y); // (1) C++03 + template + constexpr bool operator<=(const stack& x, const stack& y); // (1) C++26 } ``` @@ -46,3 +48,4 @@ true ``` ## 参照 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/stack/stack/op_not_equal.md b/reference/stack/stack/op_not_equal.md index dd2ea49074..e1768421c5 100644 --- a/reference/stack/stack/op_not_equal.md +++ b/reference/stack/stack/op_not_equal.md @@ -6,7 +6,9 @@ ```cpp namespace std { template - bool operator!=(const stack& x, const stack& y); + bool operator!=(const stack& x, const stack& y); // (1) C++03 + template + constexpr bool operator!=(const stack& x, const stack& y); // (1) C++26 } ``` @@ -52,3 +54,4 @@ true ``` ## 参照 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/stack/stack/pop.md b/reference/stack/stack/pop.md index 250fef22fa..5b8a5fb975 100644 --- a/reference/stack/stack/pop.md +++ b/reference/stack/stack/pop.md @@ -5,7 +5,8 @@ * function[meta id-type] ```cpp -void pop(); +void pop(); // (1) C++03 +constexpr void pop(); // (1) C++26 ``` ## 概要 @@ -59,3 +60,7 @@ Popping out elements... 4 3 2 1 0 ```cpp void pop() { c.pop_back(); } ``` + + +## 参照 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/stack/stack/push.md b/reference/stack/stack/push.md index bbb16a832d..5a540916e0 100644 --- a/reference/stack/stack/push.md +++ b/reference/stack/stack/push.md @@ -5,8 +5,11 @@ * function[meta id-type] ```cpp -void push(const value_type& x); // (1) -void push(value_type&& x); // (2) C++11 +void push(const value_type& x); // (1) C++03 +constexpr void push(const value_type& x); // (1) C++26 + +void push(value_type&& x); // (2) C++11 +constexpr void push(value_type&& x); // (2) C++26 ``` ## 概要 @@ -71,3 +74,7 @@ int main() void push(const value_type& x) { c.push_back(x); } void push(value_type&& x) { c.push_back(std::move(x)); } ``` + + +## 参照 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/stack/stack/push_range.md b/reference/stack/stack/push_range.md index 033c284071..9bc99b0f41 100644 --- a/reference/stack/stack/push_range.md +++ b/reference/stack/stack/push_range.md @@ -7,7 +7,9 @@ ```cpp template R> -void push_range(R&& rg); // C++23 +void push_range(R&& rg); // (1) C++23 +template R> +constexpr void push_range(R&& rg); // (1) C++26 ``` ## 概要 @@ -64,3 +66,7 @@ int main() | 名前 | 説明 | |-------------------|----------------| | [`push`](push.md) | 要素を追加する | + + +## 参照 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/stack/stack/size.md b/reference/stack/stack/size.md index cc5094b419..12de0ea4f9 100644 --- a/reference/stack/stack/size.md +++ b/reference/stack/stack/size.md @@ -5,7 +5,8 @@ * function[meta id-type] ```cpp -size_type size() const; +size_type size() const; // (1) C++03 +constexpr size_type size() const; // (1) C++26 ``` ## 概要 @@ -69,3 +70,7 @@ size_type size() const { return c.size(); } | 名前 | 説明 | |-----------------------|--------------------------------| | [`empty`](empty.md) | コンテナが空であるかを確認する | + + +## 参照 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/stack/stack/swap.md b/reference/stack/stack/swap.md index 0455cd7c6d..e265e78f9f 100644 --- a/reference/stack/stack/swap.md +++ b/reference/stack/stack/swap.md @@ -6,7 +6,8 @@ * cpp11[meta cpp] ```cpp -void swap(stack& s) noexcept(noexcept(swap(c, s.c))); +void swap(stack& s) noexcept(noexcept(swap(c, s.c))); // (1) C++11 +constexpr void swap(stack& s) noexcept(noexcept(swap(c, s.c))); // (1) C++26 ``` ## 概要 @@ -94,3 +95,4 @@ void swap(stack& s) noexcept(noexcept(swap(c, s.c))) ## 参照 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/stack/stack/swap_free.md b/reference/stack/stack/swap_free.md index 8cc1970f6d..41b6fbc576 100644 --- a/reference/stack/stack/swap_free.md +++ b/reference/stack/stack/swap_free.md @@ -7,7 +7,15 @@ ```cpp namespace std { template - void swap(stack& x, stack& y) noexcept(noexcept(x.swap(y))); + void + swap(stack& x, + stack& y) + noexcept(noexcept(x.swap(y))); // (1) C++11 + template + constexpr void + swap(stack& x, + stack& y) + noexcept(noexcept(x.swap(y))); // (1) C++26 } ``` @@ -87,3 +95,7 @@ y : 4 1 3 - [GCC](/implementation.md#gcc): 4.7.0 [mark verified] - [ICC](/implementation.md#icc): ?? - [Visual C++](/implementation.md#visual_cpp): + + +## 参照 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/stack/stack/top.md b/reference/stack/stack/top.md index f9381f31b7..685050e1d0 100644 --- a/reference/stack/stack/top.md +++ b/reference/stack/stack/top.md @@ -5,8 +5,11 @@ * function[meta id-type] ```cpp -reference top(); -const_reference top() const; +reference top(); // (1) C++03 +constexpr reference top(); // (1) C++26 + +const_reference top() const; // (2) C++03 +constexpr const_reference top() const; // (2) C++26 ``` ## 概要 @@ -64,3 +67,7 @@ const_reference top() const { return c.back(); } |---------------------|------------| | [`push`](push.md) | 要素の追加 | | [`pop`](pop.md) | 要素の削除 | + + +## 参照 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/unordered_map/unordered_map/at.md b/reference/unordered_map/unordered_map/at.md index abe0c2d105..7b0a593282 100644 --- a/reference/unordered_map/unordered_map/at.md +++ b/reference/unordered_map/unordered_map/at.md @@ -6,13 +6,17 @@ * cpp11[meta cpp] ```cpp -T& at(const key_type& x); // (1) C++11 -const T& at(const key_type& x) const; // (2) C++11 +T& at(const key_type& x); // (1) C++11 +constexpr T& at(const key_type& x); // (1) C++26 + +const T& at(const key_type& x) const; // (2) C++11 +constexpr const T& at(const key_type& x) const; // (2) C++26 template -T& at(const K& x); // (3) C++26 +constexpr T& at(const K& x); // (3) C++26 + template -const T& at(const K& x) const; // (4) C++26 +constexpr const T& at(const K& x) const; // (4) C++26 ``` ## 概要 @@ -108,3 +112,4 @@ exception std::out_of_range - [LWG Issue 761. `unordered_map` needs an `at()` member function](http://www.open-std.org/jtc1/sc22/wg21/docs/lwg-defects.html#761) - [P2363R5 Extending associative containers with the remaining heterogeneous overloads](http://open-std.org/jtc1/sc22/wg21/docs/papers/2023/p2363r5.html) - C++26で`template `のバージョンが追加された +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/unordered_map/unordered_map/begin-size_type.md b/reference/unordered_map/unordered_map/begin-size_type.md index 3c53e4b12b..056e5f46f3 100644 --- a/reference/unordered_map/unordered_map/begin-size_type.md +++ b/reference/unordered_map/unordered_map/begin-size_type.md @@ -6,8 +6,11 @@ * cpp11[meta cpp] ```cpp -local_iterator begin(size_type n); -const_local_iterator begin(size_type n) const; +local_iterator begin(size_type n); // (1) C++11 +constexpr local_iterator begin(size_type n); // (1) C++26 + +const_local_iterator begin(size_type n) const; // (2) C++11 +constexpr const_local_iterator begin(size_type n) const; // (2) C++26 ``` ## 概要 @@ -99,3 +102,7 @@ bucket = 10, bucket_size = 1, keys = { A, } | [`end(size_type)`](end-size_type.md) | インデックス(添え字)で指定したバケット内の最終要素の次を指すイテレータを取得 | | [`cbegin(size_type)`](cbegin-size_type.md) | インデックス(添え字)で指定したバケット内の先頭要素を指す読み取り専用イテレータを取得 | | [`cend(size_type)`](cend-size_type.md) | インデックス(添え字)で指定したバケット内の最終要素の次を指す読み取り専用イテレータを取得 | + + +## 参照 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/unordered_map/unordered_map/begin.md b/reference/unordered_map/unordered_map/begin.md index 0dfc05f138..4c11709302 100644 --- a/reference/unordered_map/unordered_map/begin.md +++ b/reference/unordered_map/unordered_map/begin.md @@ -6,8 +6,11 @@ * cpp11[meta cpp] ```cpp -iterator begin() noexcept; -const_iterator begin() const noexcept; +iterator begin() noexcept; // (1) C++11 +constexpr iterator begin() noexcept; // (1) C++26 + +const_iterator begin() const noexcept; // (2) C++11 +constexpr const_iterator begin() const noexcept; // (2) C++26 ``` ## 概要 @@ -87,3 +90,7 @@ int main() | [`end(size_type)`](end-size_type.md) | インデックス(添え字)で指定したバケット内の最終要素の次を指すイテレータを取得 | | [`cbegin(size_type)`](cbegin-size_type.md) | インデックス(添え字)で指定したバケット内の先頭要素を指す読み取り専用イテレータを取得 | | [`cend(size_type)`](cend-size_type.md) | インデックス(添え字)で指定したバケット内の最終要素の次を指す読み取り専用イテレータを取得 | + + +## 参照 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/unordered_map/unordered_map/bucket.md b/reference/unordered_map/unordered_map/bucket.md index 0a02d5c0d5..f506e31560 100644 --- a/reference/unordered_map/unordered_map/bucket.md +++ b/reference/unordered_map/unordered_map/bucket.md @@ -6,10 +6,11 @@ * cpp11[meta cpp] ```cpp -size_type bucket(const key_type& k) const; // (1) C++11 +size_type bucket(const key_type& k) const; // (1) C++11 +constexpr size_type bucket(const key_type& k) const; // (1) C++26 template -size_type bucket(const K& k) const; // (2) C++26 +constexpr size_type bucket(const K& k) const; // (2) C++26 ``` ## 概要 @@ -114,3 +115,4 @@ key = H, bucket = 6, bucket_size = 0 ## 参照 - [P2363R5 Extending associative containers with the remaining heterogeneous overloads](http://open-std.org/jtc1/sc22/wg21/docs/papers/2023/p2363r5.html) - C++26で`template `のバージョンが追加された +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/unordered_map/unordered_map/bucket_count.md b/reference/unordered_map/unordered_map/bucket_count.md index 06ec609649..50a6b2911f 100644 --- a/reference/unordered_map/unordered_map/bucket_count.md +++ b/reference/unordered_map/unordered_map/bucket_count.md @@ -6,7 +6,8 @@ * cpp11[meta cpp] ```cpp -size_type bucket_count() const noexcept; +size_type bucket_count() const noexcept; // (1) C++11 +constexpr size_type bucket_count() const noexcept; // (1) C++26 ``` ## 概要 @@ -72,3 +73,7 @@ bucket count is 11 | [`end(size_type)`](end-size_type.md) | インデックス(添え字)で指定したバケット内の最終要素の次を指すイテレータを取得 | | [`cbegin(size_type)`](cbegin-size_type.md) | インデックス(添え字)で指定したバケット内の先頭要素を指す読み取り専用イテレータを取得 | | [`cend(size_type)`](cend-size_type.md) | インデックス(添え字)で指定したバケット内の最終要素の次を指す読み取り専用イテレータを取得 | + + +## 参照 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/unordered_map/unordered_map/bucket_size.md b/reference/unordered_map/unordered_map/bucket_size.md index 00fcd58e03..5ddcd8338f 100644 --- a/reference/unordered_map/unordered_map/bucket_size.md +++ b/reference/unordered_map/unordered_map/bucket_size.md @@ -6,7 +6,8 @@ * cpp11[meta cpp] ```cpp -size_type bucket_size(size_type n) const; +size_type bucket_size(size_type n) const; // (1) C++11 +constexpr size_type bucket_size(size_type n) const; // (1) C++26 ``` ## 概要 @@ -99,3 +100,7 @@ bucket = 10, bucket_size = 1, keys = { A, } | [`end(size_type)`](end-size_type.md) | インデックス(添え字)で指定したバケット内の最終要素の次を指すイテレータを取得 | | [`cbegin(size_type)`](cbegin-size_type.md) | インデックス(添え字)で指定したバケット内の先頭要素を指す読み取り専用イテレータを取得 | | [`cend(size_type)`](cend-size_type.md) | インデックス(添え字)で指定したバケット内の最終要素の次を指す読み取り専用イテレータを取得 | + + +## 参照 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/unordered_map/unordered_map/cbegin-size_type.md b/reference/unordered_map/unordered_map/cbegin-size_type.md index f627431445..bbc5308c77 100644 --- a/reference/unordered_map/unordered_map/cbegin-size_type.md +++ b/reference/unordered_map/unordered_map/cbegin-size_type.md @@ -6,7 +6,8 @@ * cpp11[meta cpp] ```cpp -const_local_iterator cbegin(size_type n) const; +const_local_iterator cbegin(size_type n) const; // (1) C++11 +constexpr const_local_iterator cbegin(size_type n) const; // (1) C++26 ``` ## 概要 @@ -98,3 +99,7 @@ bucket = 10, bucket_size = 1, keys = { A, } | [`begin(size_type)`](begin-size_type.md) | インデックス(添え字)で指定したバケット内の先頭要素を指すイテレータを取得 | | [`end(size_type)`](end-size_type.md) | インデックス(添え字)で指定したバケット内の最終要素の次を指すイテレータを取得 | | [`cend(size_type)`](cend-size_type.md) | インデックス(添え字)で指定したバケット内の最終要素の次を指す読み取り専用イテレータを取得 | + + +## 参照 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/unordered_map/unordered_map/cbegin.md b/reference/unordered_map/unordered_map/cbegin.md index 09b5dbb821..966db055de 100644 --- a/reference/unordered_map/unordered_map/cbegin.md +++ b/reference/unordered_map/unordered_map/cbegin.md @@ -6,7 +6,8 @@ * cpp11[meta cpp] ```cpp -const_iterator cbegin() const noexcept; +const_iterator cbegin() const noexcept; // (1) C++11 +constexpr const_iterator cbegin() const noexcept; // (1) C++26 ``` ## 概要 @@ -78,3 +79,7 @@ int main() | [`end(size_type)`](end-size_type.md) | インデックス(添え字)で指定したバケット内の最終要素の次を指すイテレータを取得 | | [`cbegin(size_type)`](cbegin-size_type.md) | インデックス(添え字)で指定したバケット内の先頭要素を指す読み取り専用イテレータを取得 | | [`cend(size_type)`](cend-size_type.md) | インデックス(添え字)で指定したバケット内の最終要素の次を指す読み取り専用イテレータを取得 | + + +## 参照 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/unordered_map/unordered_map/cend-size_type.md b/reference/unordered_map/unordered_map/cend-size_type.md index 7a4133d725..f602a9abad 100644 --- a/reference/unordered_map/unordered_map/cend-size_type.md +++ b/reference/unordered_map/unordered_map/cend-size_type.md @@ -6,7 +6,8 @@ * cpp11[meta cpp] ```cpp -const_local_iterator cend(size_type n) const; +const_local_iterator cend(size_type n) const; // (1) C++11 +constexpr const_local_iterator cend(size_type n) const; // (1) C++26 ``` ## 概要 @@ -98,3 +99,7 @@ bucket = 10, bucket_size = 1, keys = { A, } | [`begin(size_type)`](begin-size_type.md) | インデックス(添え字)で指定したバケット内の先頭要素を指すイテレータを取得 | | [`end(size_type)`](end-size_type.md) | インデックス(添え字)で指定したバケット内の最終要素の次を指すイテレータを取得 | | [`cbegin(size_type)`](cbegin-size_type.md) | インデックス(添え字)で指定したバケット内の先頭要素を指す読み取り専用イテレータを取得 | + + +## 参照 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/unordered_map/unordered_map/cend.md b/reference/unordered_map/unordered_map/cend.md index 29a7e04049..e35ba6c072 100644 --- a/reference/unordered_map/unordered_map/cend.md +++ b/reference/unordered_map/unordered_map/cend.md @@ -6,7 +6,8 @@ * cpp11[meta cpp] ```cpp -const_iterator cend() const noexcept; +const_iterator cend() const noexcept; // (1) C++11 +constexpr const_iterator cend() const noexcept; // (1) C++26 ``` ## 概要 @@ -82,3 +83,7 @@ int main() | [`end(size_type)`](end-size_type.md) | インデックス(添え字)で指定したバケット内の最終要素の次を指すイテレータを取得 | | [`cbegin(size_type)`](cbegin-size_type.md) | インデックス(添え字)で指定したバケット内の先頭要素を指す読み取り専用イテレータを取得 | | [`cend(size_type)`](cend-size_type.md) | インデックス(添え字)で指定したバケット内の最終要素の次を指す読み取り専用イテレータを取得 | + + +## 参照 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/unordered_map/unordered_map/clear.md b/reference/unordered_map/unordered_map/clear.md index 366152e203..bf53d441a9 100644 --- a/reference/unordered_map/unordered_map/clear.md +++ b/reference/unordered_map/unordered_map/clear.md @@ -6,7 +6,8 @@ * cpp11[meta cpp] ```cpp -void clear() noexcept; +void clear() noexcept; // (1) C++11 +constexpr void clear() noexcept; // (1) C++26 ``` ## 概要 @@ -99,3 +100,7 @@ true | [`insert`](insert.md) | 要素の追加 | | [`erase`](erase.md) | 要素の削除 | | [`swap`](swap.md) | 内容の交換 | + + +## 参照 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/unordered_map/unordered_map/contains.md b/reference/unordered_map/unordered_map/contains.md index bce59c04c1..3724001279 100644 --- a/reference/unordered_map/unordered_map/contains.md +++ b/reference/unordered_map/unordered_map/contains.md @@ -6,10 +6,13 @@ * cpp20[meta cpp] ```cpp -bool contains(const key_type& x) const; // (1) +bool contains(const key_type& x) const; // (1) C++20 +constexpr bool contains(const key_type& x) const; // (1) C++26 template -bool contains(const K& k) const; // (2) +bool contains(const K& k) const; // (2) C++20 +template +constexpr bool contains(const K& k) const; // (2) C++26 ``` @@ -82,3 +85,4 @@ contain ## 参照 - [P0458R2 Checking for Existence of an Element in Associative Containers](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2018/p0458r2.html) - [P0919R3 Heterogeneous lookup for unordered containers](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2018/p0919r3.html) +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/unordered_map/unordered_map/count.md b/reference/unordered_map/unordered_map/count.md index 83ba572345..11958362f2 100644 --- a/reference/unordered_map/unordered_map/count.md +++ b/reference/unordered_map/unordered_map/count.md @@ -6,10 +6,13 @@ * cpp11[meta cpp] ```cpp -size_type count(const key_type& x) const; // (1) C++11 +size_type count(const key_type& x) const; // (1) C++11 +constexpr size_type count(const key_type& x) const; // (1) C++26 template -size_type count(const K& k) const; // (2) C++20 +size_type count(const K& k) const; // (2) C++20 +template +constexpr size_type count(const K& k) const; // (2) C++26 ``` ## 概要 @@ -94,3 +97,4 @@ int main() ## 参照 - [LWG Issue 2304. Complexity of `count` in unordered associative containers](http://www.open-std.org/jtc1/sc22/wg21/docs/lwg-defects.html#2304) - [P0919R3 Heterogeneous lookup for unordered containers](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2018/p0919r3.html) +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/unordered_map/unordered_map/emplace.md b/reference/unordered_map/unordered_map/emplace.md index 29f2e2fba7..7192d34a63 100644 --- a/reference/unordered_map/unordered_map/emplace.md +++ b/reference/unordered_map/unordered_map/emplace.md @@ -7,7 +7,9 @@ ```cpp template -pair emplace(Args&&... args); +pair emplace(Args&&... args); // (1) C++11 +template +constexpr pair emplace(Args&&... args); // (1) C++26 ``` ## 概要 @@ -160,3 +162,4 @@ int main() ## 参照 - [N2680 Proposed Wording for Placement Insert (Revision 1)](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2680.pdf) - [LWG Issue 2156. Unordered containers' reserve(n) reserves for n-1 elements](https://wg21.cmeerw.net/lwg/issue2156) +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/unordered_map/unordered_map/emplace_hint.md b/reference/unordered_map/unordered_map/emplace_hint.md index 289478d662..6bcd15e6cd 100644 --- a/reference/unordered_map/unordered_map/emplace_hint.md +++ b/reference/unordered_map/unordered_map/emplace_hint.md @@ -7,7 +7,9 @@ ```cpp template -iterator emplace_hint(const_iterator position, Args&&... args); +iterator emplace_hint(const_iterator position, Args&&... args); // (1) C++11 +template +constexpr iterator emplace_hint(const_iterator position, Args&&... args); // (1) C++26 ``` ## 概要 @@ -160,3 +162,4 @@ int main() ## 参照 - [N2680 Proposed Wording for Placement Insert (Revision 1)](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2680.pdf) - [LWG Issue 2156. Unordered containers' reserve(n) reserves for n-1 elements](https://wg21.cmeerw.net/lwg/issue2156) +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/unordered_map/unordered_map/empty.md b/reference/unordered_map/unordered_map/empty.md index fca5f7ee30..206cbcd50e 100644 --- a/reference/unordered_map/unordered_map/empty.md +++ b/reference/unordered_map/unordered_map/empty.md @@ -6,9 +6,9 @@ * cpp11[meta cpp] ```cpp -bool empty() const noexcept; // C++11 -[[nodiscard]] bool empty() const noexcept; // C++20 -bool empty() const noexcept; // C++26 +bool empty() const noexcept; // (1) C++11 +[[nodiscard]] bool empty() const noexcept; // (1) C++20 +constexpr bool empty() const noexcept; // (1) C++26 ``` ## 概要 @@ -97,3 +97,4 @@ inline bool unordered_map::empty() const noexcept { - C++20で`[[nodiscard]]`が付加された - [P2422R1 Remove `nodiscard` annotations from the standard library specification](https://open-std.org/jtc1/sc22/wg21/docs/papers/2024/p2422r1.html) - C++26で`[[nodiscard]]`指定が削除された +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/unordered_map/unordered_map/end-size_type.md b/reference/unordered_map/unordered_map/end-size_type.md index 472bb9fec8..d9e236a6c0 100644 --- a/reference/unordered_map/unordered_map/end-size_type.md +++ b/reference/unordered_map/unordered_map/end-size_type.md @@ -6,8 +6,11 @@ * cpp11[meta cpp] ```cpp -local_iterator end(size_type n); -const_local_iterator end(size_type n) const; +local_iterator end(size_type n); // (1) C++11 +constexpr local_iterator end(size_type n); // (1) C++26 + +const_local_iterator end(size_type n) const; // (2) C++11 +constexpr const_local_iterator end(size_type n) const; // (2) C++26 ``` ## 概要 @@ -99,3 +102,7 @@ bucket = 10, bucket_size = 1, keys = { A, } | [`begin(size_type)`](begin-size_type.md) | インデックス(添え字)で指定したバケット内の先頭要素を指すイテレータを取得 | | [`cbegin(size_type)`](cbegin-size_type.md) | インデックス(添え字)で指定したバケット内の先頭要素を指す読み取り専用イテレータを取得 | | [`cend(size_type)`](cend-size_type.md) | インデックス(添え字)で指定したバケット内の最終要素の次を指す読み取り専用イテレータを取得 | + + +## 参照 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/unordered_map/unordered_map/end.md b/reference/unordered_map/unordered_map/end.md index 97b7ba066e..6a4861826f 100644 --- a/reference/unordered_map/unordered_map/end.md +++ b/reference/unordered_map/unordered_map/end.md @@ -6,8 +6,11 @@ * cpp11[meta cpp] ```cpp -iterator end() noexcept; -const_iterator end() const noexcept; +iterator end() noexcept; // (1) C++11 +constexpr iterator end() noexcept; // (1) C++26 + +const_iterator end() const noexcept; // (2) C++11 +constexpr const_iterator end() const noexcept; // (2) C++26 ``` ## 概要 @@ -89,3 +92,7 @@ int main() | [`end(size_type)`](end-size_type.md) | インデックス(添え字)で指定したバケット内の最終要素の次を指すイテレータを取得 | | [`cbegin(size_type)`](cbegin-size_type.md) | インデックス(添え字)で指定したバケット内の先頭要素を指す読み取り専用イテレータを取得 | | [`cend(size_type)`](cend-size_type.md) | インデックス(添え字)で指定したバケット内の最終要素の次を指す読み取り専用イテレータを取得 + + +## 参照 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/unordered_map/unordered_map/equal_range.md b/reference/unordered_map/unordered_map/equal_range.md index 04c3e72976..81cd2e2518 100644 --- a/reference/unordered_map/unordered_map/equal_range.md +++ b/reference/unordered_map/unordered_map/equal_range.md @@ -7,16 +7,28 @@ ```cpp pair - equal_range(const key_type& x); // (1) C++11 + equal_range(const key_type& x); // (1) C++11 +constexpr pair + equal_range(const key_type& x); // (1) C++26 + pair equal_range(const key_type& x) const; // (2) C++11 +constexpr pair + equal_range(const key_type& x) const; // (2) C++26 template pair - equal_range(const K& k); // (3) C++20 + equal_range(const K& k); // (3) C++20 +template +constexpr pair + equal_range(const K& k); // (3) C++26 + template pair - equal_range(const K& k) const; // (4) C++20 + equal_range(const K& k) const; // (4) C++20 +template +constexpr pair + equal_range(const K& k) const; // (4) C++26 ``` ## 概要 @@ -119,3 +131,4 @@ up:1 ## 参照 - [P0919R3 Heterogeneous lookup for unordered containers](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2018/p0919r3.html) +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/unordered_map/unordered_map/erase.md b/reference/unordered_map/unordered_map/erase.md index c1ec6e9a0f..339a1fc492 100644 --- a/reference/unordered_map/unordered_map/erase.md +++ b/reference/unordered_map/unordered_map/erase.md @@ -6,13 +6,17 @@ * cpp11[meta cpp] ```cpp -iterator erase(iterator position); // (1) C++17 +iterator erase(iterator position); // (1) C++17 +constexpr iterator erase(iterator position); // (1) C++26 -iterator erase(const_iterator position); // (2) C++11 +iterator erase(const_iterator position); // (2) C++11 +constexpr iterator erase(const_iterator position); // (2) C++26 -size_type erase(const key_type& k); // (3) C++11 +size_type erase(const key_type& k); // (3) C++11 +constexpr size_type erase(const key_type& k); // (3) C++26 -iterator erase(const_iterator first, const_iterator last); // (4) C++11 +iterator erase(const_iterator first, const_iterator last); // (4) C++11 +constexpr iterator erase(const_iterator first, const_iterator last); // (4) C++26 ``` ## 概要 @@ -215,3 +219,4 @@ int main() - [N2350 Container insert/erase and iterator constness (Revision 1)](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2350.pdf) - [LWG Issue 2059. C++0x ambiguity problem with `map::erase`](https://cplusplus.github.io/LWG/issue2059) - C++17で、`erase(iterator)`を追加 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/unordered_map/unordered_map/erase_if_free.md b/reference/unordered_map/unordered_map/erase_if_free.md index c527dcc231..fd0866d2ea 100644 --- a/reference/unordered_map/unordered_map/erase_if_free.md +++ b/reference/unordered_map/unordered_map/erase_if_free.md @@ -8,7 +8,10 @@ namespace std { template typename unordered_map::size_type - erase_if(unordered_map& c, Predicate pred); + erase_if(unordered_map& c, Predicate pred); // (1) C++20 + template + constexpr typename unordered_map::size_type + erase_if(unordered_map& c, Predicate pred); // (1) C++26 } ``` @@ -84,3 +87,4 @@ int main() ## 参照 - [P1209R0 Adopt consistent container erasure from Library Fundamentals 2](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2018/p1209r0.html) - [R1115R3 Improving the Return Value of Erase-Like Algorithms II: Free `erase`/`erase_if`](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2019/p1115r3.pdf) +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/unordered_map/unordered_map/extract.md b/reference/unordered_map/unordered_map/extract.md index 2f907d40ae..292ff88065 100644 --- a/reference/unordered_map/unordered_map/extract.md +++ b/reference/unordered_map/unordered_map/extract.md @@ -6,8 +6,11 @@ * cpp17[meta cpp] ```cpp -node_type extract(const_iterator position); (1) -node_type extract(const key_type& x); (2) +node_type extract(const_iterator position); // (1) C++17 +constexpr node_type extract(const_iterator position); // (1) C++26 + +node_type extract(const key_type& x); // (2) C++17 +constexpr node_type extract(const key_type& x); // (2) C++26 ``` ## 概要 @@ -95,3 +98,4 @@ m2 : ## 参照 - [Splicing Maps and Sets(Revision 5)](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/p0083r3.pdf) +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/unordered_map/unordered_map/find.md b/reference/unordered_map/unordered_map/find.md index 43066fc4f4..47bc757c35 100644 --- a/reference/unordered_map/unordered_map/find.md +++ b/reference/unordered_map/unordered_map/find.md @@ -6,11 +6,17 @@ * cpp11[meta cpp] ```cpp -iterator find(const key_type& x); // (1) C++11 -const_iterator find(const key_type& x) const; // (2) C++11 +iterator find(const key_type& x); // (1) C++11 +constexpr iterator find(const key_type& x); // (1) C++26 -template iterator find(const K& k); // (3) C++20 -template const_iterator find(const K& k) const; // (4) C++20 +const_iterator find(const key_type& x) const; // (2) C++11 +constexpr const_iterator find(const key_type& x) const; // (2) C++26 + +template iterator find(const K& k); // (3) C++20 +template constexpr iterator find(const K& k); // (3) C++26 + +template const_iterator find(const K& k) const; // (4) C++20 +template constexpr const_iterator find(const K& k) const; // (4) C++26 ``` ## 概要 @@ -92,3 +98,4 @@ int main() ## 参照 - [P0919R3 Heterogeneous lookup for unordered containers](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2018/p0919r3.html) +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/unordered_map/unordered_map/get_allocator.md b/reference/unordered_map/unordered_map/get_allocator.md index 96189bf35c..d9f586f41d 100644 --- a/reference/unordered_map/unordered_map/get_allocator.md +++ b/reference/unordered_map/unordered_map/get_allocator.md @@ -6,7 +6,8 @@ * cpp11[meta cpp] ```cpp -allocator_type get_allocator() const noexcept; +allocator_type get_allocator() const noexcept; // (1) C++11 +constexpr allocator_type get_allocator() const noexcept; // (1) C++26 ``` ## 概要 @@ -49,3 +50,7 @@ int main() - [Visual C++](/implementation.md#visual_cpp): 2010 [mark verified], 2012 [mark verified], 2013 [mark verified], 2015 [mark verified], 2017 [mark verified] - 2010は、`noexcept`が修飾されていない。 - 2012, 2013は、`noexcept`が実装されていないため、`throw()`が修飾されている。 + + +## 参照 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/unordered_map/unordered_map/hash_function.md b/reference/unordered_map/unordered_map/hash_function.md index 8f0ff7ea72..278ae1613e 100644 --- a/reference/unordered_map/unordered_map/hash_function.md +++ b/reference/unordered_map/unordered_map/hash_function.md @@ -6,7 +6,8 @@ * cpp11[meta cpp] ```cpp -hasher hash_function() const; +hasher hash_function() const; // (1) C++11 +constexpr hasher hash_function() const; // (1) C++26 ``` ## 概要 @@ -79,3 +80,7 @@ hash("2nd") = 12978775524054262047 |-----------------------------------------|------------------------------------------------------| | [`hash`](/reference/functional/hash.md) | デフォルトのハッシュ関数オブジェクト(class template) | | [`key_eq`](key_eq.md) | キー比較用関数オブジェクトの取得 | + + +## 参照 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/unordered_map/unordered_map/insert.md b/reference/unordered_map/unordered_map/insert.md index e0283c3195..7b90433c37 100644 --- a/reference/unordered_map/unordered_map/insert.md +++ b/reference/unordered_map/unordered_map/insert.md @@ -6,25 +6,41 @@ * cpp11[meta cpp] ```cpp -pair insert(const value_type& v); // (1) -pair insert(value_type&& v); // (2) C++17 +pair insert(const value_type& v); // (1) C++11 +constexpr pair insert(const value_type& v); // (1) C++26 +pair insert(value_type&& v); // (2) C++17 +constexpr pair insert(value_type&& v); // (2) C++26 + +template +pair insert(P&& obj); // (3) C++11 template -pair insert(P&& obj); // (3) +constexpr pair insert(P&& obj); // (3) C++26 + +iterator insert(const_iterator position, const value_type& v); // (4) C++11 +constexpr iterator insert(const_iterator position, const value_type& v); // (4) C++26 -iterator insert(const_iterator position, const value_type& v); // (4) -iterator insert(const_iterator hint, value_type&& v); // (5) C++17 +iterator insert(const_iterator hint, value_type&& v); // (5) C++17 +constexpr iterator insert(const_iterator hint, value_type&& v); // (5) C++26 template -iterator insert(const_iterator position, P&& obj); // (6) +iterator insert(const_iterator position, P&& obj); // (6) C++11 +template +constexpr iterator insert(const_iterator position, P&& obj); // (6) C++26 template -void insert(InputIterator first, InputIterator last); // (7) +void insert(InputIterator first, InputIterator last); // (7) C++11 +template +constexpr void insert(InputIterator first, InputIterator last); // (7) C++26 + +void insert(initializer_list il); // (8) C++11 +constexpr void insert(initializer_list il); // (8) C++26 -void insert(initializer_list il); // (8) +insert_return_type insert(node_type&& nh); // (9) C++17 +constexpr insert_return_type insert(node_type&& nh); // (9) C++26 -insert_return_type insert(node_type&& nh); // (9) C++17 -iterator insert(const_iterator hint, node_type&& nh); // (10) C++17 +iterator insert(const_iterator hint, node_type&& nh); // (10) C++17 +constexpr iterator insert(const_iterator hint, node_type&& nh); // (10) C++26 ``` * initializer_list[link /reference/initializer_list/initializer_list.md] @@ -314,3 +330,4 @@ inline void unordered_map::insert(initializer_list pair insert_or_assign(const key_type& k, - M&& obj); // (1) C++17 + M&& obj); // (1) C++17 +template +constexpr pair + insert_or_assign(const key_type& k, + M&& obj); // (1) C++26 template pair insert_or_assign(key_type&& k, - M&& obj); // (2) C++17 + M&& obj); // (2) C++17 +template +constexpr pair + insert_or_assign(key_type&& k, + M&& obj); // (2) C++26 template -pair +constexpr pair insert_or_assign(K&& k, - M&& obj); // (3) C++26 + M&& obj); // (3) C++26 template iterator insert_or_assign(const_iterator hint, const key_type& k, - M&& obj); // (4) C++17 + M&& obj); // (4) C++17 +template +constexpr iterator + insert_or_assign(const_iterator hint, + const key_type& k, + M&& obj); // (4) C++26 template iterator insert_or_assign(const_iterator hint, key_type&& k, - M&& obj); // (5) C++17 + M&& obj); // (5) C++17 +template +constexpr iterator + insert_or_assign(const_iterator hint, + key_type&& k, + M&& obj); // (5) C++26 template -iterator +constexpr iterator insert_or_assign(const_iterator hint, K&& k, - M&& obj); // (6) C++26 + M&& obj); // (6) C++26 ``` ## 概要 @@ -169,3 +187,4 @@ key = two, value = 42, is inserted = false, is empty = true - [N4279 Improved insertion interface for unique-key maps (Revision 2.3)](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n4279.html) - [P2363R5 Extending associative containers with the remaining heterogeneous overloads](http://open-std.org/jtc1/sc22/wg21/docs/papers/2023/p2363r5.html) - C++26で`template `のバージョンが追加された +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/unordered_map/unordered_map/insert_range.md b/reference/unordered_map/unordered_map/insert_range.md index 00082d60e3..157a5afa9a 100644 --- a/reference/unordered_map/unordered_map/insert_range.md +++ b/reference/unordered_map/unordered_map/insert_range.md @@ -7,7 +7,9 @@ ```cpp template R> -void insert_range(R&& rg); // C++23 +void insert_range(R&& rg); // (1) C++23 +template R> +constexpr void insert_range(R&& rg); // (1) C++26 ``` ## 概要 @@ -73,3 +75,7 @@ A 10 |-------------------------------------------|----------------------| | [`insert`](insert.md) | 要素の追加 | | [`insert_or_assign`](insert_or_assign.md) | 要素の追加、あるいは代入 | + + +## 参照 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/unordered_map/unordered_map/key_eq.md b/reference/unordered_map/unordered_map/key_eq.md index d7a7fa7986..ac631284d8 100644 --- a/reference/unordered_map/unordered_map/key_eq.md +++ b/reference/unordered_map/unordered_map/key_eq.md @@ -6,7 +6,8 @@ * cpp11[meta cpp] ```cpp -key_equal key_eq() const; +key_equal key_eq() const; // (1) C++11 +constexpr key_equal key_eq() const; // (1) C++26 ``` ## 概要 @@ -77,3 +78,7 @@ eq("1st", "1st") = true |-------------------------------------------------|----------------------------------------------| | [`equal_to`](/reference/functional/equal_to.md) | 等値比較演算関数オブジェクト(class template) | | [`hash_function`](hash_function.md) | ハッシュ関数オブジェクトの取得 | + + +## 参照 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/unordered_map/unordered_map/load_factor.md b/reference/unordered_map/unordered_map/load_factor.md index 7f9648efd1..01002676e8 100644 --- a/reference/unordered_map/unordered_map/load_factor.md +++ b/reference/unordered_map/unordered_map/load_factor.md @@ -6,7 +6,8 @@ * cpp11[meta cpp] ```cpp -float load_factor() const noexcept; +float load_factor() const noexcept; // (1) C++11 +constexpr float load_factor() const noexcept; // (1) C++26 ``` ## 概要 @@ -88,3 +89,7 @@ current load_factor: 0.5 | [`size`](size.md) | 要素数の取得 | | [`bucket_count`](bucket_count.md) | バケット数の取得 | | [`max_load_factor`](max_load_factor.md) | 負荷率の最大値を取得、設定 | + + +## 参照 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/unordered_map/unordered_map/max_bucket_count.md b/reference/unordered_map/unordered_map/max_bucket_count.md index 1e85abe2ae..8fdfdd0a43 100644 --- a/reference/unordered_map/unordered_map/max_bucket_count.md +++ b/reference/unordered_map/unordered_map/max_bucket_count.md @@ -6,7 +6,8 @@ * cpp11[meta cpp] ```cpp -size_type max_bucket_count() const noexcept; +size_type max_bucket_count() const noexcept; // (1) C++11 +constexpr size_type max_bucket_count() const noexcept; // (1) C++26 ``` ## 概要 @@ -66,3 +67,7 @@ max bucket count is 576460752303423487 | [`end(size_type)`](end-size_type.md) | インデックス(添え字)で指定したバケット内の最終要素の次を指すイテレータを取得 | | [`cbegin(size_type)`](cbegin-size_type.md) | インデックス(添え字)で指定したバケット内の先頭要素を指す読み取り専用イテレータを取得 | | [`cend(size_type)`](cend-size_type.md) | インデックス(添え字)で指定したバケット内の最終要素の次を指す読み取り専用イテレータを取得 | + + +## 参照 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/unordered_map/unordered_map/max_load_factor.md b/reference/unordered_map/unordered_map/max_load_factor.md index 10d9abdf06..df9e36868f 100644 --- a/reference/unordered_map/unordered_map/max_load_factor.md +++ b/reference/unordered_map/unordered_map/max_load_factor.md @@ -6,8 +6,11 @@ * cpp11[meta cpp] ```cpp -float max_load_factor() const noexcept; // (1) -void max_load_factor(float z); // (2) +float max_load_factor() const noexcept; // (1) C++11 +constexpr float max_load_factor() const noexcept; // (1) C++26 + +void max_load_factor(float z); // (2) C++11 +constexpr void max_load_factor(float z); // (2) C++26 ``` ## 概要 @@ -139,3 +142,7 @@ new load_factor: 1.125 | [`size`](size.md) | 要素数の取得 | | [`bucket_count`](bucket_count.md) | バケット数の取得 | | [`clear`](clear.md) | 全要素の削除 | + + +## 参照 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/unordered_map/unordered_map/max_size.md b/reference/unordered_map/unordered_map/max_size.md index ff55d71924..a4ad105fac 100644 --- a/reference/unordered_map/unordered_map/max_size.md +++ b/reference/unordered_map/unordered_map/max_size.md @@ -6,7 +6,8 @@ * cpp11[meta cpp] ```cpp -size_type max_size() const noexcept; +size_type max_size() const noexcept; // (1) C++11 +constexpr size_type max_size() const noexcept; // (1) C++26 ``` ## 概要 @@ -66,3 +67,7 @@ libstdc++ では、コンテナのアロケータ `allocator_type` にメンバ |-----------------------|----------------------------| | [`empty`](empty.md) | コンテナが空かどうかを判定 | | [`size`](size.md) | 要素数の取得 | + + +## 参照 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/unordered_map/unordered_map/merge.md b/reference/unordered_map/unordered_map/merge.md index 7bbd0083e6..548e3b7c41 100644 --- a/reference/unordered_map/unordered_map/merge.md +++ b/reference/unordered_map/unordered_map/merge.md @@ -7,13 +7,24 @@ ```cpp template - void merge(unordered_map& source); // (1) +void merge(unordered_map& source); // (1) C++17 template - void merge(unordered_map&& source); // (2) +constexpr void merge(unordered_map& source); // (1) C++26 + +template +void merge(unordered_map&& source); // (2) C++17 +template +constexpr void merge(unordered_map&& source); // (2) C++26 + +template +void merge(unordered_multimap& source); // (3) C++17 +template +constexpr void merge(unordered_multimap& source); // (3) C++26 + template - void merge(unordered_multimap& source); // (3) +void merge(unordered_multimap&& source); // (4) C++17 template - void merge(unordered_multimap&& source); // (4) +constexpr void merge(unordered_multimap&& source); // (4) C++26 ``` ## 概要 @@ -93,3 +104,4 @@ m2 : ## 参照 - [Splicing Maps and Sets(Revision 5)](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/p0083r3.pdf) +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/unordered_map/unordered_map/op_assign.md b/reference/unordered_map/unordered_map/op_assign.md index 34f376dae7..7fb59fd31e 100644 --- a/reference/unordered_map/unordered_map/op_assign.md +++ b/reference/unordered_map/unordered_map/op_assign.md @@ -6,13 +6,21 @@ * cpp11[meta cpp] ```cpp -unordered_map& operator=(const unordered_map& v); // (1) -unordered_map& operator=(unordered_map&& rv); // (2) +unordered_map& operator=(const unordered_map& v); // (1) C++11 +constexpr unordered_map& operator=(const unordered_map& v); // (1) C++26 + +unordered_map& operator=(unordered_map&& rv); // (2) C++11 unordered_map& operator=(unordered_map&& x) noexcept(allocator_traits::is_always_equal::value && is_nothrow_move_assignable::value - && is_nothrow_move_assignable::value); // (2) C++17 -unordered_map& operator=(initializer_list il); // (3) + && is_nothrow_move_assignable::value); // (2) C++17 +constexpr unordered_map& operator=(unordered_map&& x) + noexcept(allocator_traits::is_always_equal::value + && is_nothrow_move_assignable::value + && is_nothrow_move_assignable::value); // (2) C++26 + +unordered_map& operator=(initializer_list il); // (3) C++11 +constexpr unordered_map& operator=(initializer_list il); // (3) C++26 ``` * initializer_list[link /reference/initializer_list/initializer_list.md] @@ -95,3 +103,4 @@ unordered_map& operator=(initializer_list il); // (3) - (3)の経緯となる提案文書 - [N4258 Cleaning-up noexcept in the Library, Rev 3](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n4258.pdf) - `noexcept` 追加の経緯となる提案文書 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/unordered_map/unordered_map/op_at.md b/reference/unordered_map/unordered_map/op_at.md index a06ea79464..84b0cbca19 100644 --- a/reference/unordered_map/unordered_map/op_at.md +++ b/reference/unordered_map/unordered_map/op_at.md @@ -6,12 +6,14 @@ * cpp11[meta cpp] ```cpp -T& operator[](const key_type& x); // (1) C++11 +T& operator[](const key_type& x); // (1) C++11 +constexpr T& operator[](const key_type& x); // (1) C++26 -T& operator[](key_type&& x); // (2) C++11 +T& operator[](key_type&& x); // (2) C++11 +constexpr T& operator[](key_type&& x); // (2) C++26 template -T& operator[](K&& k); // (3) C++26 +constexpr T& operator[](K&& k); // (3) C++26 ``` ## 概要 @@ -103,3 +105,4 @@ size=2 ## 参照 - [P2363R5 Extending associative containers with the remaining heterogeneous overloads](http://open-std.org/jtc1/sc22/wg21/docs/papers/2023/p2363r5.html) - C++26で`template `のバージョンが追加された +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/unordered_map/unordered_map/op_constructor.md b/reference/unordered_map/unordered_map/op_constructor.md index 327e7af737..81f1479b88 100644 --- a/reference/unordered_map/unordered_map/op_constructor.md +++ b/reference/unordered_map/unordered_map/op_constructor.md @@ -6,89 +6,167 @@ * cpp11[meta cpp] ```cpp -unordered_map(); // (1) C++14 - -explicit unordered_map(size_type n, - const hasher& hf = hasher(), - const key_equal& eql = key_equal(), - const allocator_type& a = allocator_type()); // (2) C++14 - -explicit unordered_map(size_type n = 実装依存の既定値, - const hasher& hf = hasher(), - const key_equal& eql = key_equal(), - const allocator_type& a = allocator_type()); // (1) + (2) C++11 +unordered_map(); // (1) C++14 +constexpr unordered_map(); // (1) C++26 + +explicit + unordered_map(size_type n, + const hasher& hf = hasher(), + const key_equal& eql = key_equal(), + const allocator_type& a = allocator_type()); // (2) C++14 +constexpr explicit + unordered_map(size_type n, + const hasher& hf = hasher(), + const key_equal& eql = key_equal(), + const allocator_type& a = allocator_type()); // (2) C++26 + +explicit + unordered_map(size_type n = 実装依存の既定値, + const hasher& hf = hasher(), + const key_equal& eql = key_equal(), + const allocator_type& a = allocator_type()); // (1) + (2) C++11 template unordered_map(InputIterator first, InputIterator last, size_type n = 実装依存の既定値, const hasher& hf = hasher(), const key_equal& eql = key_equal(), - const allocator_type& a = allocator_type()); // (3) + const allocator_type& a = allocator_type()); // (3) C++11 +template +constexpr + unordered_map(InputIterator first, InputIterator last, + size_type n = 実装依存の既定値, + const hasher& hf = hasher(), + const key_equal& eql = key_equal(), + const allocator_type& a = allocator_type()); // (3) C++26 -unordered_map(const unordered_map& v); // (4) +unordered_map(const unordered_map& v); // (4) C++11 +constexpr unordered_map(const unordered_map& v); // (4) C++26 -unordered_map(unordered_map&& rv); // (5) +unordered_map(unordered_map&& rv); // (5) C++11 +constexpr unordered_map(unordered_map&& rv); // (5) C++26 -explicit unordered_map(const allocator_type& a); // (6) +explicit unordered_map(const allocator_type& a); // (6) C++11 +constexpr explicit unordered_map(const allocator_type& a); // (6) C++26 -unordered_map(const unordered_map& v, const allocator_type& a); // (7) unordered_map(const unordered_map& v, - const type_identity_t& a); // (7) C++23 + const allocator_type& a); // (7) C++11 +unordered_map(const unordered_map& v, + const type_identity_t& a); // (7) C++23 +constexpr + unordered_map(const unordered_map& v, + const type_identity_t& a); // (7) C++26 -unordered_map(unordered_map&& rv, const allocator_type& a); // (8) unordered_map(unordered_map&& rv, - const type_identity_t& a); // (8) C++23 + const allocator_type& a); // (8) C++11 +unordered_map(unordered_map&& rv, + const type_identity_t& a); // (8) C++23 +constexpr + unordered_map(unordered_map&& rv, + const type_identity_t& a); // (8) C++26 unordered_map(initializer_list il, size_type n = 実装依存の既定値, const hasher& hf = hasher(), const key_equal& eql = key_equal(), - const allocator_type& a = allocator_type()); // (9) + const allocator_type& a = allocator_type()); // (9) C++11 +constexpr + unordered_map(initializer_list il, + size_type n = 実装依存の既定値, + const hasher& hf = hasher(), + const key_equal& eql = key_equal(), + const allocator_type& a = allocator_type()); // (9) C++26 + +unordered_map(size_type n, const allocator_type& a); // (10) C++14 +constexpr unordered_map(size_type n, const allocator_type& a); // (10) C++26 -unordered_map(size_type n, const allocator_type& a); // (10) C++14 unordered_map(size_type n, const hasher& hf, - const allocator_type& a); // (11) C++14 + const allocator_type& a); // (11) C++14 +constexpr + unordered_map(size_type n, + const hasher& hf, + const allocator_type& a); // (11) C++26 template unordered_map(InputIterator f, InputIterator l, size_type n, - const allocator_type& a); // (12) C++14 + const allocator_type& a); // (12) C++14 +template +constexpr + unordered_map(InputIterator f, + InputIterator l, + size_type n, + const allocator_type& a); // (12) C++26 template unordered_map(InputIterator f, InputIterator l, size_type n, - const hasher& hf, - const allocator_type& a); // (13) C++14 + const hasher& hf, + const allocator_type& a); // (13) C++14 +template +constexpr + unordered_map(InputIterator f, + InputIterator l, + size_type n, + const hasher& hf, + const allocator_type& a); // (13) C++26 unordered_map(initializer_list il, size_type n, - const allocator_type& a); // (14) C++14 + const allocator_type& a); // (14) C++14 +constexpr + unordered_map(initializer_list il, + size_type n, + const allocator_type& a); // (14) C++26 unordered_map(initializer_list il, size_type n, - const hasher& hf, - const allocator_type& a); // (15) C++14 + const hasher& hf, + const allocator_type& a); // (15) C++14 +constexpr + unordered_map(initializer_list il, + size_type n, + const hasher& hf, + const allocator_type& a); // (15) C++26 template R> unordered_map(std::from_range_t, R&& rg, size_type n = 実装依存の既定値, const hasher& hf = hasher(), const key_equal& eql = key_equal(), - const allocator_type& a = allocator_type()); // (16) C++23 + const allocator_type& a = allocator_type()); // (16) C++23 +template R> +constexpr + unordered_map(std::from_range_t, R&& rg, + size_type n = 実装依存の既定値, + const hasher& hf = hasher(), + const key_equal& eql = key_equal(), + const allocator_type& a = allocator_type()); // (16) C++26 template R> unordered_map(std::from_range_t, R&& rg, size_type n, - const allocator_type& a); // (17) C++23 + const allocator_type& a); // (17) C++23 +template R> +constexpr + unordered_map(std::from_range_t, R&& rg, + size_type n, + const allocator_type& a); // (17) C++26 template R> unordered_map(std::from_range_t, R&& rg, size_type n, const hasher& hf, - const allocator_type& a); // (18) C++23 + const allocator_type& a); // (18) C++23 +template R> +constexpr + unordered_map(std::from_range_t, R&& rg, + size_type n, + const hasher& hf, + const allocator_type& a); // (18) C++26 ``` * type_identity_t[link /reference/type_traits/type_identity.md] * initializer_list[link /reference/initializer_list/initializer_list.md] @@ -271,3 +349,4 @@ libstdc++ には 4.8.2 現在、(6), (7), (8)の形式はない。 なお、Discussion の例はアロケータの型が誤っているので注意 - [P1518R2 Stop Overconstraining Allocators in Container Deduction Guides](https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2021/p1518r2.html) - C++23でのアロケータ引数を`type_identity_t`で包む変更 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/unordered_map/unordered_map/op_destructor.md b/reference/unordered_map/unordered_map/op_destructor.md index 89fbc8e0fc..e6d23ed7ec 100644 --- a/reference/unordered_map/unordered_map/op_destructor.md +++ b/reference/unordered_map/unordered_map/op_destructor.md @@ -6,7 +6,8 @@ * cpp11[meta cpp] ```cpp -~unordered_map(); +~unordered_map(); // (1) C++11 +constexpr ~unordered_map(); // (1) C++26 ``` ## 概要 @@ -37,3 +38,7 @@ |---------------------------------------|----------------| | [`(constructor)`](op_constructor.md) | コンストラクタ | | [`operator=`](op_assign.md) | 代入演算子 | + + +## 参照 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/unordered_map/unordered_map/op_equal.md b/reference/unordered_map/unordered_map/op_equal.md index c18ac50c20..05d077269a 100644 --- a/reference/unordered_map/unordered_map/op_equal.md +++ b/reference/unordered_map/unordered_map/op_equal.md @@ -9,6 +9,9 @@ namespace std { template bool operator==(const unordered_map& a, const unordered_map& b); // (1) C++11 + template + constexpr bool operator==(const unordered_map& a, + const unordered_map& b); // (1) C++26 } ``` @@ -90,3 +93,4 @@ int main() - [P0809R0 Comparing Unordered Containers](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2018/p0809r0.pdf) - [P1614R2 The Mothership has Landed](https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2019/p1614r2.html) - C++20での三方比較演算子の追加と、関連する演算子の自動導出 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/unordered_map/unordered_map/op_not_equal.md b/reference/unordered_map/unordered_map/op_not_equal.md index f9283c6aba..b6a6374cd5 100644 --- a/reference/unordered_map/unordered_map/op_not_equal.md +++ b/reference/unordered_map/unordered_map/op_not_equal.md @@ -10,6 +10,9 @@ namespace std { template bool operator!=(const unordered_map& a, const unordered_map& b); // (1) C++11 + template + constexpr bool operator!=(const unordered_map& a, + const unordered_map& b); // (1) C++26 } ``` @@ -84,3 +87,4 @@ int main() - [P0809R0 Comparing Unordered Containers](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2018/p0809r0.pdf) - [P1614R2 The Mothership has Landed](https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2019/p1614r2.html) - C++20での三方比較演算子の追加と、関連する演算子の自動導出 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/unordered_map/unordered_map/rehash.md b/reference/unordered_map/unordered_map/rehash.md index 7f3d4a489e..f81bd9a47e 100644 --- a/reference/unordered_map/unordered_map/rehash.md +++ b/reference/unordered_map/unordered_map/rehash.md @@ -6,7 +6,8 @@ * cpp11[meta cpp] ```cpp -void rehash(size_type n); +void rehash(size_type n); // (1) C++11 +constexpr void rehash(size_type n); // (1) C++26 ``` ## 概要 @@ -126,3 +127,4 @@ new load_factor: 0.363636 ## 参照 - [LWG Issue 2156. Unordered containers' reserve(n) reserves for n-1 elements](https://wg21.cmeerw.net/lwg/issue2156) +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/unordered_map/unordered_map/reserve.md b/reference/unordered_map/unordered_map/reserve.md index 464c33c00f..f212161894 100644 --- a/reference/unordered_map/unordered_map/reserve.md +++ b/reference/unordered_map/unordered_map/reserve.md @@ -6,7 +6,8 @@ * cpp11[meta cpp] ```cpp -void reserve(size_type n); +void reserve(size_type n); // (1) C++11 +constexpr void reserve(size_type n); // (1) C++26 ``` ## 概要 @@ -130,3 +131,4 @@ new load_factor: 0.363636 ## 参照 - [LWG Issue 2156. Unordered containers' reserve(n) reserves for n-1 elements](https://wg21.cmeerw.net/lwg/issue2156) +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/unordered_map/unordered_map/size.md b/reference/unordered_map/unordered_map/size.md index 6db820a97c..5b9ff367f4 100644 --- a/reference/unordered_map/unordered_map/size.md +++ b/reference/unordered_map/unordered_map/size.md @@ -6,7 +6,8 @@ * cpp11[meta cpp] ```cpp -size_type size() const noexcept; +size_type size() const noexcept; // (1) C++11 +constexpr size_type size() const noexcept; // (1) C++26 ``` ## 概要 @@ -71,3 +72,7 @@ int main() | [`begin`](begin.md) | 先頭要素を指すイテレータの取得 | | [`end`](end.md) | 最終要素の次を指すイテレータの取得 | | [`distance`](/reference/iterator/distance.md) | イテレータ間の距離を求める | + + +## 参照 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/unordered_map/unordered_map/swap.md b/reference/unordered_map/unordered_map/swap.md index ef254865d9..8d44cd9139 100644 --- a/reference/unordered_map/unordered_map/swap.md +++ b/reference/unordered_map/unordered_map/swap.md @@ -6,11 +6,15 @@ * cpp11[meta cpp] ```cpp -void swap(unordered_map& v); +void swap(unordered_map& v); // (1) C++11 void swap(unordered_map& x) noexcept(allocator_traits::is_always_equal::value && noexcept(swap(declval(),declval())) - && noexcept(swap(declval(),declval()))); // C++17 + && noexcept(swap(declval(),declval()))); // (1) C++17 +constexpr void swap(unordered_map& x) + noexcept(allocator_traits::is_always_equal::value + && noexcept(swap(declval(),declval())) + && noexcept(swap(declval(),declval()))); // (1) C++26 ``` ## 概要 @@ -119,3 +123,4 @@ um2 after : (9th, 9), (7th, 7), (5th, 5), (3rd, 3), (1st, 1), ## 参照 - [N4258 Cleaning-up noexcept in the Library, Rev 3](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n4258.pdf) - `noexcept` 追加の経緯となる提案文書 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/unordered_map/unordered_map/swap_free.md b/reference/unordered_map/unordered_map/swap_free.md index 198cc2f4c5..d2019a05cb 100644 --- a/reference/unordered_map/unordered_map/swap_free.md +++ b/reference/unordered_map/unordered_map/swap_free.md @@ -7,20 +7,26 @@ ```cpp namespace std { template - void swap (unordered_map& x, - unordered_map& y); - + void + swap(unordered_map& x, + unordered_map& y); // (1) C++11 + template + void + swap(unordered_map& x, + unordered_map& y) + noexcept(noexcept(x.swap(y))); // (1) C++17 template - void swap (unordered_map& x, - unordered_map& y) - noexcept(noexcept(x.swap(y))); // C++17 + constexpr void + swap(unordered_map& x, + unordered_map& y) + noexcept(noexcept(x.swap(y))); // (1) C++26 } ``` ## 概要 -2つの `unordered_map` オブジェクトである `x` と 'y'が保持するコンテンツを交換する。サイズは異なる場合もある。 +2つの `unordered_map` オブジェクトである `x` と `y` が保持するコンテンツを交換する。サイズは異なる場合もある。 -このメンバ関数の呼び出しの後、呼び出し前に 'x' にあった要素は `y` へ、`y` 内にあった要素は `x` へ移る。全てのイテレータ、参照、ポインタは有効なまま残る。 +このメンバ関数の呼び出しの後、呼び出し前に `x` にあった要素は `y` へ、`y` 内にあった要素は `x` へ移る。全てのイテレータ、参照、ポインタは有効なまま残る。 ## 効果 @@ -95,3 +101,4 @@ um2 : {[10,a], [20,b], [30,c], } ## 参照 - [N4258 Cleaning-up noexcept in the Library, Rev 3](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n4258.pdf) - `noexcept` 追加の経緯となる提案文書 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/unordered_map/unordered_map/try_emplace.md b/reference/unordered_map/unordered_map/try_emplace.md index 745b32dd22..cd6f205400 100644 --- a/reference/unordered_map/unordered_map/try_emplace.md +++ b/reference/unordered_map/unordered_map/try_emplace.md @@ -9,35 +9,53 @@ template pair try_emplace(const key_type& k, - Args&&... args); // (1) C++17 + Args&&... args); // (1) C++17 +template +constexpr pair + try_emplace(const key_type& k, + Args&&... args); // (1) C++26 template pair try_emplace(key_type&& k, - Args&&... args); // (2) C++17 + Args&&... args); // (2) C++17 +template +constexpr pair + try_emplace(key_type&& k, + Args&&... args); // (2) C++26 template -pair +constexpr pair try_emplace(K&& k, - Args&&... args); // (3) C++26 + Args&&... args); // (3) C++26 template iterator try_emplace(const_iterator hint, const key_type& k, - Args&&... args); // (4) C++17 + Args&&... args); // (4) C++17 +template +constexpr iterator + try_emplace(const_iterator hint, + const key_type& k, + Args&&... args); // (4) C++26 template iterator try_emplace(const_iterator hint, key_type&& k, - Args&&... args); // (5) C++17 + Args&&... args); // (5) C++17 +template +constexpr iterator + try_emplace(const_iterator hint, + key_type&& k, + Args&&... args); // (5) C++26 template -iterator +constexpr iterator try_emplace(const_iterator hint, K&& k, - Args&&... args); // (6) C++26 + Args&&... args); // (6) C++26 ``` ## 概要 @@ -175,3 +193,4 @@ key = two, value = 2, is inserted = false, is empty = false - [N4279 Improved insertion interface for unique-key maps (Revision 2.3)](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n4279.html) - [P2363R5: Extending associative containers with the remaining heterogeneous overloads](https://open-std.org/jtc1/sc22/wg21/docs/papers/2023/p2363r5.html) - C++26で`template `のバージョンが追加された +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/unordered_map/unordered_multimap/begin-size_type.md b/reference/unordered_map/unordered_multimap/begin-size_type.md index f9382ae5d1..cae678b002 100644 --- a/reference/unordered_map/unordered_multimap/begin-size_type.md +++ b/reference/unordered_map/unordered_multimap/begin-size_type.md @@ -6,8 +6,11 @@ * cpp11[meta cpp] ```cpp -local_iterator begin(size_type n); -const_local_iterator begin(size_type n) const; +local_iterator begin(size_type n); // (1) C++11 +constexpr local_iterator begin(size_type n); // (1) C++26 + +const_local_iterator begin(size_type n) const; // (2) C++11 +constexpr const_local_iterator begin(size_type n) const; // (2) C++26 ``` ## 概要 @@ -99,3 +102,7 @@ bucket = 10, bucket_size = 1, keys = { A, } | [`end(size_type)`](end-size_type.md) | インデックス(添え字)で指定したバケット内の最終要素の次を指すイテレータを取得 | | [`cbegin(size_type)`](cbegin-size_type.md) | インデックス(添え字)で指定したバケット内の先頭要素を指す読み取り専用イテレータを取得 | | [`cend(size_type)`](cend-size_type.md) | インデックス(添え字)で指定したバケット内の最終要素の次を指す読み取り専用イテレータを取得 | + + +## 参照 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/unordered_map/unordered_multimap/begin.md b/reference/unordered_map/unordered_multimap/begin.md index 3adc360f8d..d8152674f9 100644 --- a/reference/unordered_map/unordered_multimap/begin.md +++ b/reference/unordered_map/unordered_multimap/begin.md @@ -6,8 +6,11 @@ * cpp11[meta cpp] ```cpp -iterator begin() noexcept; -const_iterator begin() const noexcept; +iterator begin() noexcept; // (1) C++11 +constexpr iterator begin() noexcept; // (1) C++26 + +const_iterator begin() const noexcept; // (2) C++11 +constexpr const_iterator begin() const noexcept; // (2) C++26 ``` ## 概要 @@ -87,3 +90,7 @@ int main() | [`end(size_type)`](end-size_type.md) | インデックス(添え字)で指定したバケット内の最終要素の次を指すイテレータを取得 | | [`cbegin(size_type)`](cbegin-size_type.md) | インデックス(添え字)で指定したバケット内の先頭要素を指す読み取り専用イテレータを取得 | | [`cend(size_type)`](cend-size_type.md) | インデックス(添え字)で指定したバケット内の最終要素の次を指す読み取り専用イテレータを取得 | + + +## 参照 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/unordered_map/unordered_multimap/bucket.md b/reference/unordered_map/unordered_multimap/bucket.md index 245a20b5e4..da6b875c1e 100644 --- a/reference/unordered_map/unordered_multimap/bucket.md +++ b/reference/unordered_map/unordered_multimap/bucket.md @@ -6,10 +6,10 @@ * cpp11[meta cpp] ```cpp -size_type bucket(const key_type& k) const; // (1) C++26 +constexpr size_type bucket(const key_type& k) const; // (1) C++26 template -size_type bucket(const K& k) const; // (2) C++26 +constexpr size_type bucket(const K& k) const; // (2) C++26 ``` ## 概要 @@ -113,3 +113,4 @@ key = H, bucket = 6, bucket_size = 0 ## 参照 - [P2363R5 Extending associative containers with the remaining heterogeneous overloads](http://open-std.org/jtc1/sc22/wg21/docs/papers/2023/p2363r5.html) - C++26で`template `のバージョンが追加された +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/unordered_map/unordered_multimap/bucket_count.md b/reference/unordered_map/unordered_multimap/bucket_count.md index 07f816186f..5f3f581634 100644 --- a/reference/unordered_map/unordered_multimap/bucket_count.md +++ b/reference/unordered_map/unordered_multimap/bucket_count.md @@ -6,7 +6,8 @@ * cpp11[meta cpp] ```cpp -size_type bucket_count() const noexcept; +size_type bucket_count() const noexcept; // (1) C++11 +constexpr size_type bucket_count() const noexcept; // (1) C++26 ``` ## 概要 @@ -72,3 +73,7 @@ bucket count is 11 | [`end(size_type)`](end-size_type.md) | インデックス(添え字)で指定したバケット内の最終要素の次を指すイテレータを取得 | | [`cbegin(size_type)`](cbegin-size_type.md) | インデックス(添え字)で指定したバケット内の先頭要素を指す読み取り専用イテレータを取得 | | [`cend(size_type)`](cend-size_type.md) | インデックス(添え字)で指定したバケット内の最終要素の次を指す読み取り専用イテレータを取得 | + + +## 参照 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/unordered_map/unordered_multimap/bucket_size.md b/reference/unordered_map/unordered_multimap/bucket_size.md index 5488d668a8..5806dcc3f3 100644 --- a/reference/unordered_map/unordered_multimap/bucket_size.md +++ b/reference/unordered_map/unordered_multimap/bucket_size.md @@ -6,7 +6,8 @@ * cpp11[meta cpp] ```cpp -size_type bucket_size(size_type n) const; +size_type bucket_size(size_type n) const; // (1) C++11 +constexpr size_type bucket_size(size_type n) const; // (1) C++26 ``` ## 概要 @@ -99,3 +100,7 @@ bucket = 10, bucket_size = 1, keys = { A, } | [`end(size_type)`](end-size_type.md) | インデックス(添え字)で指定したバケット内の最終要素の次を指すイテレータを取得 | | [`cbegin(size_type)`](cbegin-size_type.md) | インデックス(添え字)で指定したバケット内の先頭要素を指す読み取り専用イテレータを取得 | | [`cend(size_type)`](cend-size_type.md) | インデックス(添え字)で指定したバケット内の最終要素の次を指す読み取り専用イテレータを取得 | + + +## 参照 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/unordered_map/unordered_multimap/cbegin-size_type.md b/reference/unordered_map/unordered_multimap/cbegin-size_type.md index dee4c28034..586585f0b2 100644 --- a/reference/unordered_map/unordered_multimap/cbegin-size_type.md +++ b/reference/unordered_map/unordered_multimap/cbegin-size_type.md @@ -6,7 +6,8 @@ * cpp11[meta cpp] ```cpp -const_local_iterator cbegin(size_type n) const; +const_local_iterator cbegin(size_type n) const; // (1) C++11 +constexpr const_local_iterator cbegin(size_type n) const; // (1) C++26 ``` ## 概要 @@ -98,3 +99,7 @@ bucket = 10, bucket_size = 1, keys = { A, } | [`begin(size_type)`](begin-size_type.md) | インデックス(添え字)で指定したバケット内の先頭要素を指すイテレータを取得 | | [`end(size_type)`](end-size_type.md) | インデックス(添え字)で指定したバケット内の最終要素の次を指すイテレータを取得 | | [`cend(size_type)`](cend-size_type.md) | インデックス(添え字)で指定したバケット内の最終要素の次を指す読み取り専用イテレータを取得 | + + +## 参照 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/unordered_map/unordered_multimap/cbegin.md b/reference/unordered_map/unordered_multimap/cbegin.md index 1e74cab432..8ef508d698 100644 --- a/reference/unordered_map/unordered_multimap/cbegin.md +++ b/reference/unordered_map/unordered_multimap/cbegin.md @@ -6,7 +6,8 @@ * cpp11[meta cpp] ```cpp -const_iterator cbegin() const noexcept; +const_iterator cbegin() const noexcept; // (1) C++11 +constexpr const_iterator cbegin() const noexcept; // (1) C++26 ``` ## 概要 @@ -78,3 +79,7 @@ int main() | [`end(size_type)`](end-size_type.md) | インデックス(添え字)で指定したバケット内の最終要素の次を指すイテレータを取得 | | [`cbegin(size_type)`](cbegin-size_type.md) | インデックス(添え字)で指定したバケット内の先頭要素を指す読み取り専用イテレータを取得 | | [`cend(size_type)`](cend-size_type.md) | インデックス(添え字)で指定したバケット内の最終要素の次を指す読み取り専用イテレータを取得 | + + +## 参照 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/unordered_map/unordered_multimap/cend-size_type.md b/reference/unordered_map/unordered_multimap/cend-size_type.md index 5af72e4b19..df73a601aa 100644 --- a/reference/unordered_map/unordered_multimap/cend-size_type.md +++ b/reference/unordered_map/unordered_multimap/cend-size_type.md @@ -6,7 +6,8 @@ * cpp11[meta cpp] ```cpp -const_local_iterator cend(size_type n) const; +const_local_iterator cend(size_type n) const; // (1) C++11 +constexpr const_local_iterator cend(size_type n) const; // (1) C++26 ``` ## 概要 @@ -98,3 +99,7 @@ bucket = 10, bucket_size = 1, keys = { A, } | [`begin(size_type)`](begin-size_type.md) | インデックス(添え字)で指定したバケット内の先頭要素を指すイテレータを取得 | | [`end(size_type)`](end-size_type.md) | インデックス(添え字)で指定したバケット内の最終要素の次を指すイテレータを取得 | | [`cbegin(size_type)`](cbegin-size_type.md) | インデックス(添え字)で指定したバケット内の先頭要素を指す読み取り専用イテレータを取得 | + + +## 参照 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/unordered_map/unordered_multimap/cend.md b/reference/unordered_map/unordered_multimap/cend.md index 6439d2e1a4..844da39cc1 100644 --- a/reference/unordered_map/unordered_multimap/cend.md +++ b/reference/unordered_map/unordered_multimap/cend.md @@ -6,7 +6,8 @@ * cpp11[meta cpp] ```cpp -const_iterator cend() const noexcept; +const_iterator cend() const noexcept; // (1) C++11 +constexpr const_iterator cend() const noexcept; // (1) C++26 ``` ## 概要 @@ -82,3 +83,7 @@ int main() | [`end(size_type)`](end-size_type.md) | インデックス(添え字)で指定したバケット内の最終要素の次を指すイテレータを取得 | | [`cbegin(size_type)`](cbegin-size_type.md) | インデックス(添え字)で指定したバケット内の先頭要素を指す読み取り専用イテレータを取得 | | [`cend(size_type)`](cend-size_type.md) | インデックス(添え字)で指定したバケット内の最終要素の次を指す読み取り専用イテレータを取得 | + + +## 参照 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/unordered_map/unordered_multimap/clear.md b/reference/unordered_map/unordered_multimap/clear.md index 2870682a99..a47db14495 100644 --- a/reference/unordered_map/unordered_multimap/clear.md +++ b/reference/unordered_map/unordered_multimap/clear.md @@ -6,7 +6,8 @@ * cpp11[meta cpp] ```cpp -void clear() noexcept; +void clear() noexcept; // (1) C++11 +constexpr void clear() noexcept; // (1) C++26 ``` ## 概要 @@ -99,3 +100,7 @@ true | [`insert`](insert.md) | 要素の追加 | | [`erase`](erase.md) | 要素の削除 | | [`swap`](swap.md) | 内容の交換 | + + +## 参照 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/unordered_map/unordered_multimap/contains.md b/reference/unordered_map/unordered_multimap/contains.md index 7aea1e1ffe..20c3d015fc 100644 --- a/reference/unordered_map/unordered_multimap/contains.md +++ b/reference/unordered_map/unordered_multimap/contains.md @@ -6,10 +6,13 @@ * cpp20[meta cpp] ```cpp -bool contains(const key_type& x) const; // (1) +bool contains(const key_type& x) const; // (1) C++20 +constexpr bool contains(const key_type& x) const; // (1) C++26 template -bool contains(const K& k) const; // (2) +bool contains(const K& k) const; // (2) C++20 +template +constexpr bool contains(const K& k) const; // (2) C++26 ``` ## 概要 @@ -81,3 +84,4 @@ contain ## 参照 - [P0458R2 Checking for Existence of an Element in Associative Containers](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2018/p0458r2.html) - [P0919R3 Heterogeneous lookup for unordered containers](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2018/p0919r3.html) +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/unordered_map/unordered_multimap/count.md b/reference/unordered_map/unordered_multimap/count.md index 0b3d80ddd6..2d4743f384 100644 --- a/reference/unordered_map/unordered_multimap/count.md +++ b/reference/unordered_map/unordered_multimap/count.md @@ -6,10 +6,13 @@ * cpp11[meta cpp] ```cpp -size_type count(const key_type& x) const; // (1) C++11 +size_type count(const key_type& x) const; // (1) C++11 +constexpr size_type count(const key_type& x) const; // (1) C++26 template -size_type count(const K& k) const; // (2) C++20 +size_type count(const K& k) const; // (2) C++20 +template +constexpr size_type count(const K& k) const; // (2) C++26 ``` ## 概要 @@ -96,3 +99,4 @@ int main() ## 参照 - [LWG Issue 2304. Complexity of `count` in unordered associative containers](http://www.open-std.org/jtc1/sc22/wg21/docs/lwg-defects.html#2304) - [P0919R3 Heterogeneous lookup for unordered containers](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2018/p0919r3.html) +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/unordered_map/unordered_multimap/emplace.md b/reference/unordered_map/unordered_multimap/emplace.md index a82e8787c9..01973672f9 100644 --- a/reference/unordered_map/unordered_multimap/emplace.md +++ b/reference/unordered_map/unordered_multimap/emplace.md @@ -7,7 +7,9 @@ ```cpp template -iterator emplace(Args&&... args); +iterator emplace(Args&&... args); // (1) C++11 +template +constexpr iterator emplace(Args&&... args); // (1) C++26 ``` ## 概要 @@ -149,3 +151,4 @@ int main() - [LWG Issue 518. Are `insert` and `erase` stable for `unordered_multiset` and `unordered_multimap`?](https://wg21.cmeerw.net/lwg/issue518) - 安定性の保証が規定された経緯のレポート - [LWG Issue 2156. Unordered containers' reserve(n) reserves for n-1 elements](https://wg21.cmeerw.net/lwg/issue2156) +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/unordered_map/unordered_multimap/emplace_hint.md b/reference/unordered_map/unordered_multimap/emplace_hint.md index cfdd45f73c..769550ad5e 100644 --- a/reference/unordered_map/unordered_multimap/emplace_hint.md +++ b/reference/unordered_map/unordered_multimap/emplace_hint.md @@ -7,7 +7,9 @@ ```cpp template -iterator emplace_hint(const_iterator position, Args&&... args); +iterator emplace_hint(const_iterator position, Args&&... args); // (1) C++11 +template +constexpr iterator emplace_hint(const_iterator position, Args&&... args); // (1) C++26 ``` ## 概要 @@ -181,3 +183,4 @@ int main() - [LWG Issue 518. Are `insert` and `erase` stable for `unordered_multiset` and `unordered_multimap`?](https://wg21.cmeerw.net/lwg/issue518) - 安定性の保証が規定された経緯のレポート - [LWG Issue 2156. Unordered containers' reserve(n) reserves for n-1 elements](https://wg21.cmeerw.net/lwg/issue2156) +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/unordered_map/unordered_multimap/empty.md b/reference/unordered_map/unordered_multimap/empty.md index 248fea3638..815391c5fc 100644 --- a/reference/unordered_map/unordered_multimap/empty.md +++ b/reference/unordered_map/unordered_multimap/empty.md @@ -6,9 +6,9 @@ * cpp11[meta cpp] ```cpp -bool empty() const noexcept; // C++11 -[[nodiscard]] bool empty() const noexcept; // C++20 -bool empty() const noexcept; // C++26 +bool empty() const noexcept; // (1) C++11 +[[nodiscard]] bool empty() const noexcept; // (1) C++20 +constexpr bool empty() const noexcept; // (1) C++26 ``` ## 概要 @@ -97,3 +97,4 @@ inline bool unordered_multimap::empty() const noexce - C++20で`[[nodiscard]]`が付加された - [P2422R1 Remove `nodiscard` annotations from the standard library specification](https://open-std.org/jtc1/sc22/wg21/docs/papers/2024/p2422r1.html) - C++26で`[[nodiscard]]`指定が削除された +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/unordered_map/unordered_multimap/end-size_type.md b/reference/unordered_map/unordered_multimap/end-size_type.md index d64967b78a..1bbb0ad154 100644 --- a/reference/unordered_map/unordered_multimap/end-size_type.md +++ b/reference/unordered_map/unordered_multimap/end-size_type.md @@ -6,8 +6,11 @@ * cpp11[meta cpp] ```cpp -local_iterator end(size_type n); -const_local_iterator end(size_type n) const; +local_iterator end(size_type n); // (1) C++11 +constexpr local_iterator end(size_type n); // (1) C++26 + +const_local_iterator end(size_type n) const; // (2) C++11 +constexpr const_local_iterator end(size_type n) const; // (2) C++26 ``` ## 概要 @@ -99,3 +102,7 @@ bucket = 10, bucket_size = 1, keys = { A, } | [`begin(size_type)`](begin-size_type.md) | インデックス(添え字)で指定したバケット内の先頭要素を指すイテレータを取得 | | [`cbegin(size_type)`](cbegin-size_type.md) | インデックス(添え字)で指定したバケット内の先頭要素を指す読み取り専用イテレータを取得 | | [`cend(size_type)`](cend-size_type.md) | インデックス(添え字)で指定したバケット内の最終要素の次を指す読み取り専用イテレータを取得 | + + +## 参照 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/unordered_map/unordered_multimap/end.md b/reference/unordered_map/unordered_multimap/end.md index 7fb3083fb4..b28e2fb58a 100644 --- a/reference/unordered_map/unordered_multimap/end.md +++ b/reference/unordered_map/unordered_multimap/end.md @@ -6,8 +6,11 @@ * cpp11[meta cpp] ```cpp -iterator end() noexcept; -const_iterator end() const noexcept; +iterator end() noexcept; // (1) C++11 +constexpr iterator end() noexcept; // (1) C++26 + +const_iterator end() const noexcept; // (2) C++11 +constexpr const_iterator end() const noexcept; // (2) C++26 ``` ## 概要 @@ -89,3 +92,7 @@ int main() | [`end(size_type)`](end-size_type.md) | インデックス(添え字)で指定したバケット内の最終要素の次を指すイテレータを取得 | | [`cbegin(size_type)`](cbegin-size_type.md) | インデックス(添え字)で指定したバケット内の先頭要素を指す読み取り専用イテレータを取得 | | [`cend(size_type)`](cend-size_type.md) | インデックス(添え字)で指定したバケット内の最終要素の次を指す読み取り専用イテレータを取得 + + +## 参照 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/unordered_map/unordered_multimap/equal_range.md b/reference/unordered_map/unordered_multimap/equal_range.md index 605189fbb8..b29096a74e 100644 --- a/reference/unordered_map/unordered_multimap/equal_range.md +++ b/reference/unordered_map/unordered_multimap/equal_range.md @@ -7,16 +7,28 @@ ```cpp pair - equal_range(const key_type& x); // (1) C++11 + equal_range(const key_type& x); // (1) C++11 +constexpr pair + equal_range(const key_type& x); // (1) C++26 + pair equal_range(const key_type& x) const; // (2) C++11 +constexpr pair + equal_range(const key_type& x) const; // (2) C++26 template pair - equal_range(const K& k); // (3) C++20 + equal_range(const K& k); // (3) C++20 +template +constexpr pair + equal_range(const K& k); // (3) C++26 + template pair - equal_range(const K& k) const; // (4) C++20 + equal_range(const K& k) const; // (4) C++20 +template +constexpr pair + equal_range(const K& k) const; // (4) C++26 ``` ## 概要 @@ -124,3 +136,4 @@ second:1 ## 参照 - [P0919R3 Heterogeneous lookup for unordered containers](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2018/p0919r3.html) +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/unordered_map/unordered_multimap/erase.md b/reference/unordered_map/unordered_multimap/erase.md index 770804ef19..dac6320c1c 100644 --- a/reference/unordered_map/unordered_multimap/erase.md +++ b/reference/unordered_map/unordered_multimap/erase.md @@ -6,13 +6,17 @@ * cpp11[meta cpp] ```cpp -iterator erase(iterator position); // (1) C++17 +iterator erase(iterator position); // (1) C++17 +constexpr iterator erase(iterator position); // (1) C++26 -iterator erase(const_iterator position); // (2) C++11 +iterator erase(const_iterator position); // (2) C++11 +constexpr iterator erase(const_iterator position); // (2) C++26 -size_type erase(const key_type& k); // (3) C++11 +size_type erase(const key_type& k); // (3) C++11 +constexpr size_type erase(const key_type& k); // (3) C++26 -iterator erase(const_iterator first, const_iterator last); // (4) C++11 +iterator erase(const_iterator first, const_iterator last); // (4) C++11 +constexpr iterator erase(const_iterator first, const_iterator last); // (4) C++26 ``` ## 概要 @@ -217,3 +221,4 @@ int main() - 安定性の保証が規定された経緯のレポート - [LWG Issue 2059. C++0x ambiguity problem with `map::erase`](https://cplusplus.github.io/LWG/issue2059) - C++17で、`erase(iterator)`を追加 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/unordered_map/unordered_multimap/erase_if_free.md b/reference/unordered_map/unordered_multimap/erase_if_free.md index c12017d40c..2eecc54004 100644 --- a/reference/unordered_map/unordered_multimap/erase_if_free.md +++ b/reference/unordered_map/unordered_multimap/erase_if_free.md @@ -8,7 +8,10 @@ namespace std { template typename unordered_multimap::size_type - erase_if(unordered_multimap& c, Predicate pred); + erase_if(unordered_multimap& c, Predicate pred); // (1) C++20 + template + constexpr typename unordered_multimap::size_type + erase_if(unordered_multimap& c, Predicate pred); // (1) C++26 } ``` @@ -85,3 +88,4 @@ int main() ## 参照 - [P1209R0 Adopt consistent container erasure from Library Fundamentals 2](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2018/p1209r0.html) - [R1115R3 Improving the Return Value of Erase-Like Algorithms II: Free `erase`/`erase_if`](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2019/p1115r3.pdf) +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/unordered_map/unordered_multimap/extract.md b/reference/unordered_map/unordered_multimap/extract.md index 75a371680a..5fa8213dc2 100644 --- a/reference/unordered_map/unordered_multimap/extract.md +++ b/reference/unordered_map/unordered_multimap/extract.md @@ -6,8 +6,11 @@ * cpp17[meta cpp] ```cpp -node_type extract(const_iterator position); (1) -node_type extract(const key_type& x); (2) +node_type extract(const_iterator position); // (1) C++17 +constexpr node_type extract(const_iterator position); // (1) C++26 + +node_type extract(const key_type& x); // (2) C++17 +constexpr node_type extract(const key_type& x); // (2) C++26 ``` ## 概要 @@ -96,3 +99,4 @@ m2 : ## 参照 - [Splicing Maps and Sets(Revision 5)](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/p0083r3.pdf) +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/unordered_map/unordered_multimap/find.md b/reference/unordered_map/unordered_multimap/find.md index 219cf82262..f52a1f1e23 100644 --- a/reference/unordered_map/unordered_multimap/find.md +++ b/reference/unordered_map/unordered_multimap/find.md @@ -6,11 +6,17 @@ * cpp11[meta cpp] ```cpp -iterator find(const key_type& x); // (1) C++11 -const_iterator find(const key_type& x) const; // (2) C++11 +iterator find(const key_type& x); // (1) C++11 +constexpr iterator find(const key_type& x); // (1) C++26 -template iterator find(const K& k); // (3) C++20 -template const_iterator find(const K& k) const; // (4) C++20 +const_iterator find(const key_type& x) const; // (2) C++11 +constexpr const_iterator find(const key_type& x) const; // (2) C++26 + +template iterator find(const K& k); // (3) C++20 +template constexpr iterator find(const K& k); // (3) C++26 + +template const_iterator find(const K& k) const; // (4) C++20 +template constexpr const_iterator find(const K& k) const; // (4) C++26 ``` ## 概要 @@ -95,3 +101,4 @@ int main() ## 参照 - [P0919R3 Heterogeneous lookup for unordered containers](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2018/p0919r3.html) +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/unordered_map/unordered_multimap/get_allocator.md b/reference/unordered_map/unordered_multimap/get_allocator.md index 2d51cacb04..d20562660d 100644 --- a/reference/unordered_map/unordered_multimap/get_allocator.md +++ b/reference/unordered_map/unordered_multimap/get_allocator.md @@ -6,7 +6,8 @@ * cpp11[meta cpp] ```cpp -allocator_type get_allocator() const noexcept; +allocator_type get_allocator() const noexcept; // (1) C++11 +constexpr allocator_type get_allocator() const noexcept; // (1) C++26 ``` ## 概要 @@ -49,3 +50,7 @@ int main() - [Visual C++](/implementation.md#visual_cpp): 2010 [mark verified], 2012 [mark verified], 2013 [mark verified], 2015 [mark verified], 2017 [mark verified] - 2010は、`noexcept`が修飾されていない。 - 2012, 2013は、`noexcept`が実装されていないため、`throw()`が修飾されている。 + + +## 参照 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/unordered_map/unordered_multimap/hash_function.md b/reference/unordered_map/unordered_multimap/hash_function.md index 547bfbcb9d..194fbaceae 100644 --- a/reference/unordered_map/unordered_multimap/hash_function.md +++ b/reference/unordered_map/unordered_multimap/hash_function.md @@ -6,7 +6,8 @@ * cpp11[meta cpp] ```cpp -hasher hash_function() const; +hasher hash_function() const; // (1) C++11 +constexpr hasher hash_function() const; // (1) C++26 ``` ## 概要 @@ -79,3 +80,7 @@ hash("2nd") = 12978775524054262047 |-----------------------------------------|------------------------------------------------------| | [`hash`](/reference/functional/hash.md) | デフォルトのハッシュ関数オブジェクト(class template) | | [`key_eq`](key_eq.md) | キー比較用関数オブジェクトの取得 | + + +## 参照 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/unordered_map/unordered_multimap/insert.md b/reference/unordered_map/unordered_multimap/insert.md index f537e665eb..2dfcf1e491 100644 --- a/reference/unordered_map/unordered_multimap/insert.md +++ b/reference/unordered_map/unordered_multimap/insert.md @@ -6,25 +6,41 @@ * cpp11[meta cpp] ```cpp -iterator insert(const value_type& v); // (1) -iterator insert(value_type&& v); // (2) C++17 +iterator insert(const value_type& v); // (1) C++11 +constexpr iterator insert(const value_type& v); // (1) C++26 +iterator insert(value_type&& v); // (2) C++17 +constexpr iterator insert(value_type&& v); // (2) C++26 + +template +iterator insert(P&& obj); // (3) C++11 template -iterator insert(P&& obj); // (3) +constexpr iterator insert(P&& obj); // (3) C++26 + +iterator insert(const_iterator position, const value_type& v); // (4) C++11 +constexpr iterator insert(const_iterator position, const value_type& v); // (4) C++26 -iterator insert(const_iterator position, const value_type& v); // (4) -iterator insert(const_iterator hint, value_type&& v); // (5) C++17 +iterator insert(const_iterator hint, value_type&& v); // (5) C++17 +constexpr iterator insert(const_iterator hint, value_type&& v); // (5) C++26 template -iterator insert(const_iterator position, P&& obj); // (6) +iterator insert(const_iterator position, P&& obj); // (6) C++11 +template +constexpr iterator insert(const_iterator position, P&& obj); // (6) C++26 template -void insert(InputIterator first, InputIterator last); // (7) +void insert(InputIterator first, InputIterator last); // (7) C++11 +template +constexpr void insert(InputIterator first, InputIterator last); // (7) C++26 + +void insert(initializer_list il); // (8) C++11 +constexpr void insert(initializer_list il); // (8) C++26 -void insert(initializer_list il); // (8) +iterator insert(node_type&& nh); // (9) C++17 +constexpr iterator insert(node_type&& nh); // (9) C++26 -iterator insert(node_type&& nh); // (9) C++17 -iterator insert(const_iterator hint, node_type&& nh); // (10) C++17 +iterator insert(const_iterator hint, node_type&& nh); // (10) C++17 +constexpr iterator insert(const_iterator hint, node_type&& nh); // (10) C++26 ``` * initializer_list[link /reference/initializer_list/initializer_list.md] @@ -306,3 +322,4 @@ inline void unordered_multimap::insert(initializer_l - [Splicing Maps and Sets(Revision 5)](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/p0083r3.pdf) - (9), (10)経緯となる提案文書 - [How useful is the hint passed to the std::unordered_... collections? - The Old New Thing](https://devblogs.microsoft.com/oldnewthing/20241028-00/?p=110428) +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/unordered_map/unordered_multimap/insert_range.md b/reference/unordered_map/unordered_multimap/insert_range.md index 3aacccda91..9d242a4082 100644 --- a/reference/unordered_map/unordered_multimap/insert_range.md +++ b/reference/unordered_map/unordered_multimap/insert_range.md @@ -7,7 +7,9 @@ ```cpp template R> -void insert_range(R&& rg); // C++23 +void insert_range(R&& rg); // (1) C++23 +template R> +constexpr void insert_range(R&& rg); // (1) C++26 ``` ## 概要 @@ -73,3 +75,7 @@ A 10 | 名前 | 説明 | |-------------------------------------------|----------------------| | [`insert`](insert.md) | 要素の追加 | + + +## 参照 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/unordered_map/unordered_multimap/key_eq.md b/reference/unordered_map/unordered_multimap/key_eq.md index c7d20c3d32..2db5d9d578 100644 --- a/reference/unordered_map/unordered_multimap/key_eq.md +++ b/reference/unordered_map/unordered_multimap/key_eq.md @@ -6,7 +6,8 @@ * cpp11[meta cpp] ```cpp -key_equal key_eq() const; +key_equal key_eq() const; // (1) C++11 +constexpr key_equal key_eq() const; // (1) C++26 ``` ## 概要 @@ -77,3 +78,7 @@ eq("1st", "1st") = true |----------------------------------------------------|----------------------------------------------| | [`equal_to`](/reference/functional/equal_to.md) | 等値比較演算関数オブジェクト(class template) | | [`hash_function`](hash_function.md) | ハッシュ関数オブジェクトの取得 | + + +## 参照 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/unordered_map/unordered_multimap/load_factor.md b/reference/unordered_map/unordered_multimap/load_factor.md index 6f933d721b..dfab35f11a 100644 --- a/reference/unordered_map/unordered_multimap/load_factor.md +++ b/reference/unordered_map/unordered_multimap/load_factor.md @@ -6,7 +6,8 @@ * cpp11[meta cpp] ```cpp -float load_factor() const noexcept; +float load_factor() const noexcept; // (1) C++11 +constexpr float load_factor() const noexcept; // (1) C++26 ``` ## 概要 @@ -89,3 +90,7 @@ current load_factor: 0.5 | [`size`](size.md) | 要素数の取得 | | [`bucket_count`](bucket_count.md) | バケット数の取得 | | [`max_load_factor`](max_load_factor.md) | 負荷率の最大値を取得、設定 | + + +## 参照 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/unordered_map/unordered_multimap/max_bucket_count.md b/reference/unordered_map/unordered_multimap/max_bucket_count.md index 98182b12a1..cde8db0b28 100644 --- a/reference/unordered_map/unordered_multimap/max_bucket_count.md +++ b/reference/unordered_map/unordered_multimap/max_bucket_count.md @@ -6,7 +6,8 @@ * cpp11[meta cpp] ```cpp -size_type max_bucket_count() const noexcept; +size_type max_bucket_count() const noexcept; // (1) C++11 +constexpr size_type max_bucket_count() const noexcept; // (1) C++26 ``` ## 概要 @@ -66,3 +67,7 @@ max bucket count is 576460752303423487 | [`end(size_type)`](end-size_type.md) | インデックス(添え字)で指定したバケット内の最終要素の次を指すイテレータを取得 | | [`cbegin(size_type)`](cbegin-size_type.md) | インデックス(添え字)で指定したバケット内の先頭要素を指す読み取り専用イテレータを取得 | | [`cend(size_type)`](cend-size_type.md) | インデックス(添え字)で指定したバケット内の最終要素の次を指す読み取り専用イテレータを取得 | + + +## 参照 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/unordered_map/unordered_multimap/max_load_factor.md b/reference/unordered_map/unordered_multimap/max_load_factor.md index f9ec4b3bba..2597b9f9dd 100644 --- a/reference/unordered_map/unordered_multimap/max_load_factor.md +++ b/reference/unordered_map/unordered_multimap/max_load_factor.md @@ -6,8 +6,11 @@ * cpp11[meta cpp] ```cpp -float max_load_factor() const noexcept; // (1) -void max_load_factor(float z); // (2) +float max_load_factor() const noexcept; // (1) C++11 +constexpr float max_load_factor() const noexcept; // (1) C++26 + +void max_load_factor(float z); // (2) C++11 +constexpr void max_load_factor(float z); // (2) C++26 ``` ## 概要 @@ -141,3 +144,7 @@ new load_factor: 1.125 | [`size`](size.md) | 要素数の取得 | | [`bucket_count`](bucket_count.md) | バケット数の取得 | | [`clear`](clear.md) | 全要素の削除 | + + +## 参照 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/unordered_map/unordered_multimap/max_size.md b/reference/unordered_map/unordered_multimap/max_size.md index add2a7b7f2..ef8b15e273 100644 --- a/reference/unordered_map/unordered_multimap/max_size.md +++ b/reference/unordered_map/unordered_multimap/max_size.md @@ -6,7 +6,8 @@ * cpp11[meta cpp] ```cpp -size_type max_size() const noexcept; +size_type max_size() const noexcept; // (1) C++11 +constexpr size_type max_size() const noexcept; // (1) C++26 ``` ## 概要 @@ -66,3 +67,7 @@ libstdc++ では、コンテナのアロケータ `allocator_type` にメンバ |-----------------------|----------------------------| | [`empty`](empty.md) | コンテナが空かどうかを判定 | | [`size`](size.md) | 要素数の取得 | + + +## 参照 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/unordered_map/unordered_multimap/merge.md b/reference/unordered_map/unordered_multimap/merge.md index 35ff96846a..2c39db2f93 100644 --- a/reference/unordered_map/unordered_multimap/merge.md +++ b/reference/unordered_map/unordered_multimap/merge.md @@ -7,13 +7,24 @@ ```cpp template - void merge(unordered_map& source); // (1) +void merge(unordered_map& source); // (1) C++17 template - void merge(unordered_map&& source); // (2) +constexpr void merge(unordered_map& source); // (1) C++26 + +template +void merge(unordered_map&& source); // (2) C++17 +template +constexpr void merge(unordered_map&& source); // (2) C++26 + +template +void merge(unordered_multimap& source); // (3) C++17 +template +constexpr void merge(unordered_multimap& source); // (3) C++26 + template - void merge(unordered_multimap& source); // (3) +void merge(unordered_multimap&& source); // (4) C++17 template - void merge(unordered_multimap&& source); // (4) +constexpr void merge(unordered_multimap&& source); // (4) C++26 ``` ## 概要 @@ -92,3 +103,4 @@ m2 : ## 参照 - [Splicing Maps and Sets(Revision 5)](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/p0083r3.pdf) +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/unordered_map/unordered_multimap/op_assign.md b/reference/unordered_map/unordered_multimap/op_assign.md index 0c9c0ee7ec..f49ff0741c 100644 --- a/reference/unordered_map/unordered_multimap/op_assign.md +++ b/reference/unordered_map/unordered_multimap/op_assign.md @@ -6,13 +6,21 @@ * cpp11[meta cpp] ```cpp -unordered_multimap& operator=(const unordered_multimap& v); // (1) -unordered_multimap& operator=(unordered_multimap&& rv); // (2) +unordered_multimap& operator=(const unordered_multimap& v); // (1) C++11 +constexpr unordered_multimap& operator=(const unordered_multimap& v); // (1) C++26 + +unordered_multimap& operator=(unordered_multimap&& rv); // (2) C++11 unordered_multimap& operator=(unordered_multimap&& x) noexcept(allocator_traits::is_always_equal::value && is_nothrow_move_assignable::value - && is_nothrow_move_assignable::value); // (2) C++17 -unordered_multimap& operator=(initializer_list il); // (3) + && is_nothrow_move_assignable::value); // (2) C++17 +constexpr unordered_multimap& operator=(unordered_multimap&& x) + noexcept(allocator_traits::is_always_equal::value + && is_nothrow_move_assignable::value + && is_nothrow_move_assignable::value); // (2) C++26 + +unordered_multimap& operator=(initializer_list il); // (3) C++11 +constexpr unordered_multimap& operator=(initializer_list il); // (3) C++26 ``` * initializer_list[link /reference/initializer_list/initializer_list.md] @@ -95,3 +103,4 @@ unordered_multimap& operator=(initializer_list il); // (3) - (3)の経緯となる提案文書 - [N4258 Cleaning-up noexcept in the Library, Rev 3](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n4258.pdf) - `noexcept` 追加の経緯となる提案文書 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/unordered_map/unordered_multimap/op_constructor.md b/reference/unordered_map/unordered_multimap/op_constructor.md index 02ab86d18f..92d8fcce7d 100644 --- a/reference/unordered_map/unordered_multimap/op_constructor.md +++ b/reference/unordered_map/unordered_multimap/op_constructor.md @@ -6,92 +6,169 @@ * cpp11[meta cpp] ```cpp -unordered_multimap(); // (1) C++14 - -explicit unordered_multimap(size_type n, - const hasher& hf = hasher(), - const key_equal& eql = key_equal(), - const allocator_type& a = allocator_type()); // (2) C++14 - -explicit unordered_multimap(size_type n = 実装依存の既定値, - const hasher& hf = hasher(), - const key_equal& eql = key_equal(), - const allocator_type& a = allocator_type()); // (1) + (2) C++11 +unordered_multimap(); // (1) C++14 +constexpr unordered_multimap(); // (1) C++26 + +explicit + unordered_multimap(size_type n, + const hasher& hf = hasher(), + const key_equal& eql = key_equal(), + const allocator_type& a = allocator_type()); // (2) C++14 +constexpr explicit + unordered_multimap(size_type n, + const hasher& hf = hasher(), + const key_equal& eql = key_equal(), + const allocator_type& a = allocator_type()); // (2) C++26 + +explicit + unordered_multimap(size_type n = 実装依存の既定値, + const hasher& hf = hasher(), + const key_equal& eql = key_equal(), + const allocator_type& a = allocator_type()); // (1) + (2) C++11 template -unordered_multimap(InputIterator first, InputIterator last, +unordered_multimap(InputIterator first, + InputIterator last, size_type n = 実装依存の既定値, const hasher& hf = hasher(), const key_equal& eql = key_equal(), - const allocator_type& a = allocator_type()); // (3) + const allocator_type& a = allocator_type()); // (3) C++11 +template +constexpr + unordered_multimap(InputIterator first, + InputIterator last, + size_type n = 実装依存の既定値, + const hasher& hf = hasher(), + const key_equal& eql = key_equal(), + const allocator_type& a = allocator_type()); // (3) C++26 -unordered_multimap(const unordered_multimap& v); // (4) +unordered_multimap(const unordered_multimap& v); // (4) C++11 +constexpr unordered_multimap(const unordered_multimap& v); // (4) C++26 -unordered_multimap(unordered_multimap&& rv); // (5) +unordered_multimap(unordered_multimap&& rv); // (5) C++11 +constexpr unordered_multimap(unordered_multimap&& rv); // (5) C++26 -explicit unordered_multimap(const allocator_type& a); // (6) +explicit unordered_multimap(const allocator_type& a); // (6) C++11 +constexpr explicit unordered_multimap(const allocator_type& a); // (6) C++26 unordered_multimap(const unordered_multimap& v, - const allocator_type& a); // (7) + const allocator_type& a); // (7) C++11 unordered_multimap(const unordered_multimap& v, - const type_identity_t& a); // (7) C++23 + const type_identity_t& a); // (7) C++23 +constexpr + unordered_multimap(const unordered_multimap& v, + const type_identity_t& a); // (7) C++26 unordered_multimap(unordered_multimap&& rv, - const allocator_type& a); // (8) + const allocator_type& a); // (8) C++11 unordered_multimap(unordered_multimap&& rv, - const type_identity_t& a); // (8) C++23 + const type_identity_t& a); // (8) C++23 +constexpr + unordered_multimap(unordered_multimap&& rv, + const type_identity_t& a); // (8) C++26 unordered_multimap(initializer_list il, size_type n = 実装依存の既定値, const hasher& hf = hasher(), const key_equal& eql = key_equal(), - const allocator_type& a = allocator_type()); // (9) + const allocator_type& a = allocator_type()); // (9) C++11 +constexpr + unordered_multimap(initializer_list il, + size_type n = 実装依存の既定値, + const hasher& hf = hasher(), + const key_equal& eql = key_equal(), + const allocator_type& a = allocator_type()); // (9) C++26 -unordered_multimap(size_type n, const allocator_type& a); // (10) C++14 +unordered_multimap(size_type n, const allocator_type& a); // (10) C++14 +constexpr unordered_multimap(size_type n, const allocator_type& a); // (10) C++26 unordered_multimap(size_type n, const hasher& hf, - const allocator_type& a); // (11) C++14 + const allocator_type& a); // (11) C++14 +constexpr + unordered_multimap(size_type n, + const hasher& hf, + const allocator_type& a); // (11) C++26 template unordered_multimap(InputIterator f, InputIterator l, size_type n, - const allocator_type& a); // (12) C++14 + const allocator_type& a); // (12) C++14 +template +constexpr + unordered_multimap(InputIterator f, + InputIterator l, + size_type n, + const allocator_type& a); // (12) C++26 template unordered_multimap(InputIterator f, InputIterator l, size_type n, - const hasher& hf, - const allocator_type& a); // (13) C++14 + const hasher& hf, + const allocator_type& a); // (13) C++14 +template +constexpr + unordered_multimap(InputIterator f, + InputIterator l, + size_type n, + const hasher& hf, + const allocator_type& a); // (13) C++26 unordered_multimap(initializer_list il, size_type n, - const allocator_type& a); // (14) C++14 + const allocator_type& a); // (14) C++14 +constexpr + unordered_multimap(initializer_list il, + size_type n, + const allocator_type& a); // (14) C++26 unordered_multimap(initializer_list il, size_type n, - const hasher& hf, - const allocator_type& a); // (15) C++14 + const hasher& hf, + const allocator_type& a); // (15) C++14 +constexpr + unordered_multimap(initializer_list il, + size_type n, + const hasher& hf, + const allocator_type& a); // (15) C++26 template R> unordered_multimap(std::from_range_t, R&& rg, size_type n = 実装依存の既定値, const hasher& hf = hasher(), const key_equal& eql = key_equal(), - const allocator_type& a = allocator_type()); // (16) C++23 + const allocator_type& a = allocator_type()); // (16) C++23 +template R> +constexpr + unordered_multimap(std::from_range_t, R&& rg, + size_type n = 実装依存の既定値, + const hasher& hf = hasher(), + const key_equal& eql = key_equal(), + const allocator_type& a = allocator_type()); // (16) C++26 template R> unordered_multimap(std::from_range_t, R&& rg, size_type n, - const allocator_type& a); // (17) C++23 + const allocator_type& a); // (17) C++23 +template R> +constexpr + unordered_multimap(std::from_range_t, R&& rg, + size_type n, + const allocator_type& a); // (17) C++26 template R> unordered_multimap(std::from_range_t, R&& rg, size_type n, const hasher& hf, - const allocator_type& a); // (18) C++23 + const allocator_type& a); // (18) C++23 +template R> +constexpr + unordered_multimap(std::from_range_t, R&& rg, + size_type n, + const hasher& hf, + const allocator_type& a); // (18) C++26 ``` * type_identity_t[link /reference/type_traits/type_identity.md] * initializer_list[link /reference/initializer_list/initializer_list.md] @@ -277,3 +354,4 @@ libstdc++ には 4.8.2 現在、(6), (7), (8)の形式はない。 なお、Discussion の例はアロケータの型が誤っているので注意 - [P1518R2 Stop Overconstraining Allocators in Container Deduction Guides](https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2021/p1518r2.html) - C++23でのアロケータ引数を`type_identity_t`で包む変更 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/unordered_map/unordered_multimap/op_destructor.md b/reference/unordered_map/unordered_multimap/op_destructor.md index fb60b50d2f..2e286f0478 100644 --- a/reference/unordered_map/unordered_multimap/op_destructor.md +++ b/reference/unordered_map/unordered_multimap/op_destructor.md @@ -6,7 +6,8 @@ * cpp11[meta cpp] ```cpp -~unordered_multimap(); +~unordered_multimap(); // (1) C++11 +constexpr ~unordered_multimap(); // (1) C++26 ``` ## 概要 @@ -37,3 +38,7 @@ |--------------------------------------------|----------------| | [`(constructor)`](op_constructor.md) | コンストラクタ | | [`operator=`](op_assign.md) | 代入演算子 | + + +## 参照 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/unordered_map/unordered_multimap/op_equal.md b/reference/unordered_map/unordered_multimap/op_equal.md index 379ca8e684..be6756bad7 100644 --- a/reference/unordered_map/unordered_multimap/op_equal.md +++ b/reference/unordered_map/unordered_multimap/op_equal.md @@ -9,6 +9,9 @@ namespace std { template bool operator==(const unordered_multimap& a, const unordered_multimap& b); // (1) C++11 + template + constexpr bool operator==(const unordered_multimap& a, + const unordered_multimap& b); // (1) C++26 } ``` @@ -94,3 +97,4 @@ int main() - [P0809R0 Comparing Unordered Containers](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2018/p0809r0.pdf) - [P1614R2 The Mothership has Landed](https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2019/p1614r2.html) - C++20での三方比較演算子の追加と、関連する演算子の自動導出 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/unordered_map/unordered_multimap/op_not_equal.md b/reference/unordered_map/unordered_multimap/op_not_equal.md index 825509c6b3..65d5b94702 100644 --- a/reference/unordered_map/unordered_multimap/op_not_equal.md +++ b/reference/unordered_map/unordered_multimap/op_not_equal.md @@ -10,6 +10,9 @@ namespace std { template bool operator!=(const unordered_multimap& a, const unordered_multimap& b); // (1) C++11 + template + constexpr bool operator!=(const unordered_multimap& a, + const unordered_multimap& b); // (1) C++26 } ``` @@ -95,3 +98,4 @@ int main() - [P0809R0 Comparing Unordered Containers](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2018/p0809r0.pdf) - [P1614R2 The Mothership has Landed](https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2019/p1614r2.html) - C++20での三方比較演算子の追加と、関連する演算子の自動導出 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/unordered_map/unordered_multimap/rehash.md b/reference/unordered_map/unordered_multimap/rehash.md index 8db1407938..9b2b32da96 100644 --- a/reference/unordered_map/unordered_multimap/rehash.md +++ b/reference/unordered_map/unordered_multimap/rehash.md @@ -6,7 +6,8 @@ * cpp11[meta cpp] ```cpp -void rehash(size_type n); +void rehash(size_type n); // (1) C++11 +constexpr void rehash(size_type n); // (1) C++26 ``` ## 概要 @@ -126,3 +127,4 @@ new load_factor: 0.363636 ## 参照 - [LWG Issue 2156. Unordered containers' reserve(n) reserves for n-1 elements](https://wg21.cmeerw.net/lwg/issue2156) +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/unordered_map/unordered_multimap/reserve.md b/reference/unordered_map/unordered_multimap/reserve.md index e4c13bac6e..8a904456a6 100644 --- a/reference/unordered_map/unordered_multimap/reserve.md +++ b/reference/unordered_map/unordered_multimap/reserve.md @@ -6,7 +6,8 @@ * cpp11[meta cpp] ```cpp -void reserve(size_type n); +void reserve(size_type n); // (1) C++11 +constexpr void reserve(size_type n); // (1) C++26 ``` ## 概要 @@ -130,3 +131,4 @@ new load_factor: 0.363636 ## 参照 - [LWG Issue 2156. Unordered containers' reserve(n) reserves for n-1 elements](https://wg21.cmeerw.net/lwg/issue2156) +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/unordered_map/unordered_multimap/size.md b/reference/unordered_map/unordered_multimap/size.md index 5b99081eb9..e3ebd3bdd7 100644 --- a/reference/unordered_map/unordered_multimap/size.md +++ b/reference/unordered_map/unordered_multimap/size.md @@ -6,7 +6,8 @@ * cpp11[meta cpp] ```cpp -size_type size() const noexcept; +size_type size() const noexcept; // (1) C++11 +constexpr size_type size() const noexcept; // (1) C++26 ``` ## 概要 @@ -71,3 +72,7 @@ int main() | [`begin`](begin.md) | 先頭要素を指すイテレータの取得 | | [`end`](end.md) | 最終要素の次を指すイテレータの取得 | | [`distance`](/reference/iterator/distance.md) | イテレータ間の距離を求める | + + +## 参照 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/unordered_map/unordered_multimap/swap.md b/reference/unordered_map/unordered_multimap/swap.md index 7c63516753..ee4be96973 100644 --- a/reference/unordered_map/unordered_multimap/swap.md +++ b/reference/unordered_map/unordered_multimap/swap.md @@ -6,11 +6,15 @@ * cpp11[meta cpp] ```cpp -void swap(unordered_multimap& v); +void swap(unordered_multimap& v); // (1) C++11 void swap(unordered_multimap& x) noexcept(allocator_traits::is_always_equal::value && noexcept(swap(declval(),declval())) - && noexcept(swap(declval(),declval()))); // C++17 + && noexcept(swap(declval(),declval()))); // (1) C++17 +constexpr void swap(unordered_multimap& x) + noexcept(allocator_traits::is_always_equal::value + && noexcept(swap(declval(),declval())) + && noexcept(swap(declval(),declval()))); // (1) C++26 ``` ## 概要 @@ -119,3 +123,4 @@ um2 after : (7th, 7), (7th, 7), (5th, 5), (5th, 5), (9th, 9), (9th, 9), (3rd, 3) ## 参照 - [N4258 Cleaning-up noexcept in the Library, Rev 3](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n4258.pdf) - `noexcept` 追加の経緯となる提案文書 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/unordered_map/unordered_multimap/swap_free.md b/reference/unordered_map/unordered_multimap/swap_free.md index 9ad6bc6fea..74c6622ff1 100644 --- a/reference/unordered_map/unordered_multimap/swap_free.md +++ b/reference/unordered_map/unordered_multimap/swap_free.md @@ -7,20 +7,26 @@ ```cpp namespace std { template - void swap (unordered_multimap& x, - unordered_multimap& y); - + void + swap(unordered_multimap& x, + unordered_multimap& y); // (1) C++11 + template + void + swap(unordered_multimap& x, + unordered_multimap& y) + noexcept(noexcept(x.swap(y))); // (1) C++17 template - void swap (unordered_multimap& x, - unordered_multimap& y) - noexcept(noexcept(x.swap(y))); // C++17 + constexpr void + swap(unordered_multimap& x, + unordered_multimap& y) + noexcept(noexcept(x.swap(y))); // (1) C++26 } ``` ## 概要 -2つの `unordered_multimap` オブジェクトである `x` と 'y'が保持するコンテンツを交換する。サイズは異なる場合もある。 +2つの `unordered_multimap` オブジェクトである `x` と `y` が保持するコンテンツを交換する。サイズは異なる場合もある。 -このメンバ関数の呼び出しの後、呼び出し前に 'x' にあった要素は `y` へ、`y` 内にあった要素は `x` へ移る。全てのイテレータ、参照、ポインタは有効なまま残る。 +このメンバ関数の呼び出しの後、呼び出し前に `x` にあった要素は `y` へ、`y` 内にあった要素は `x` へ移る。全てのイテレータ、参照、ポインタは有効なまま残る。 ## 効果 @@ -96,3 +102,4 @@ um2 : {[10,a], [20,b], [30,c], [30,d], [30,e], } ## 参照 - [N4258 Cleaning-up noexcept in the Library, Rev 3](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n4258.pdf) - `noexcept` 追加の経緯となる提案文書 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/unordered_set/unordered_multiset/begin-size_type.md b/reference/unordered_set/unordered_multiset/begin-size_type.md index 4c87c781ea..bd18a81bb8 100644 --- a/reference/unordered_set/unordered_multiset/begin-size_type.md +++ b/reference/unordered_set/unordered_multiset/begin-size_type.md @@ -6,8 +6,11 @@ * cpp11[meta cpp] ```cpp -local_iterator begin(size_type n); -const_local_iterator begin(size_type n) const; +local_iterator begin(size_type n); // (1) C++11 +constexpr local_iterator begin(size_type n); // (1) C++26 + +const_local_iterator begin(size_type n) const; // (2) C++11 +constexpr const_local_iterator begin(size_type n) const; // (2) C++26 ``` ## 概要 @@ -99,3 +102,7 @@ bucket = 10, bucket_size = 0, keys = { } | [`end(size_type)`](end-size_type.md) | インデックス(添え字)で指定したバケット内の最終要素の次を指すイテレータを取得 | | [`cbegin(size_type)`](cbegin-size_type.md) | インデックス(添え字)で指定したバケット内の先頭要素を指す読み取り専用イテレータを取得 | | [`cend(size_type)`](cend-size_type.md) | インデックス(添え字)で指定したバケット内の最終要素の次を指す読み取り専用イテレータを取得 | + + +## 参照 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/unordered_set/unordered_multiset/begin.md b/reference/unordered_set/unordered_multiset/begin.md index b0bd3d832a..633ec68818 100644 --- a/reference/unordered_set/unordered_multiset/begin.md +++ b/reference/unordered_set/unordered_multiset/begin.md @@ -6,8 +6,11 @@ * cpp11[meta cpp] ```cpp -iterator begin() noexcept; -const_iterator begin() const noexcept; +iterator begin() noexcept; // (1) C++11 +constexpr iterator begin() noexcept; // (1) C++26 + +const_iterator begin() const noexcept; // (2) C++11 +constexpr const_iterator begin() const noexcept; // (2) C++26 ``` ## 概要 @@ -86,3 +89,7 @@ int main() | [`end(size_type)`](end-size_type.md) | インデックス(添え字)で指定したバケット内の最終要素の次を指すイテレータを取得 | | [`cbegin(size_type)`](cbegin-size_type.md) | インデックス(添え字)で指定したバケット内の先頭要素を指す読み取り専用イテレータを取得 | | [`cend(size_type)`](cend-size_type.md) | インデックス(添え字)で指定したバケット内の最終要素の次を指す読み取り専用イテレータを取得 | + + +## 参照 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/unordered_set/unordered_multiset/bucket.md b/reference/unordered_set/unordered_multiset/bucket.md index acb395f925..a3ff8fd668 100644 --- a/reference/unordered_set/unordered_multiset/bucket.md +++ b/reference/unordered_set/unordered_multiset/bucket.md @@ -6,10 +6,11 @@ * cpp11[meta cpp] ```cpp -size_type bucket(const key_type& k) const; // (1) C++11 +size_type bucket(const key_type& k) const; // (1) C++11 +constexpr size_type bucket(const key_type& k) const; // (1) C++26 template -size_type bucket(const K& k) const; // (2) C++26 +constexpr size_type bucket(const K& k) const; // (2) C++26 ``` ## 概要 @@ -112,3 +113,4 @@ key = H, bucket = 3, bucket_size = 0 ## 参照 - [P2363R5 Extending associative containers with the remaining heterogeneous overloads](http://open-std.org/jtc1/sc22/wg21/docs/papers/2023/p2363r5.html) - C++26で`template `のバージョンが追加された +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/unordered_set/unordered_multiset/bucket_count.md b/reference/unordered_set/unordered_multiset/bucket_count.md index 761cbe0fa9..0c80e55ad3 100644 --- a/reference/unordered_set/unordered_multiset/bucket_count.md +++ b/reference/unordered_set/unordered_multiset/bucket_count.md @@ -6,7 +6,8 @@ * cpp11[meta cpp] ```cpp -size_type bucket_count() const noexcept; +size_type bucket_count() const noexcept; // (1) C++11 +constexpr size_type bucket_count() const noexcept; // (1) C++26 ``` ## 概要 @@ -65,3 +66,7 @@ bucket count is 11 | [`end(size_type)`](end-size_type.md) | インデックス(添え字)で指定したバケット内の最終要素の次を指すイテレータを取得 | | [`cbegin(size_type)`](cbegin-size_type.md) | インデックス(添え字)で指定したバケット内の先頭要素を指す読み取り専用イテレータを取得 | | [`cend(size_type)`](cend-size_type.md) | インデックス(添え字)で指定したバケット内の最終要素の次を指す読み取り専用イテレータを取得 | + + +## 参照 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/unordered_set/unordered_multiset/bucket_size.md b/reference/unordered_set/unordered_multiset/bucket_size.md index aa5c29e40f..69b5b31524 100644 --- a/reference/unordered_set/unordered_multiset/bucket_size.md +++ b/reference/unordered_set/unordered_multiset/bucket_size.md @@ -6,7 +6,8 @@ * cpp11[meta cpp] ```cpp -size_type bucket_size(size_type n) const; +size_type bucket_size(size_type n) const; // (1) C++11 +constexpr size_type bucket_size(size_type n) const; // (1) C++26 ``` ## 概要 @@ -90,3 +91,7 @@ bucket = 10, bucket_size = 0, keys = { } | [`end(size_type)`](end-size_type.md) | インデックス(添え字)で指定したバケット内の最終要素の次を指すイテレータを取得 | | [`cbegin(size_type)`](cbegin-size_type.md) | インデックス(添え字)で指定したバケット内の先頭要素を指す読み取り専用イテレータを取得 | | [`cend(size_type)`](cend-size_type.md) | インデックス(添え字)で指定したバケット内の最終要素の次を指す読み取り専用イテレータを取得 | + + +## 参照 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/unordered_set/unordered_multiset/cbegin-size_type.md b/reference/unordered_set/unordered_multiset/cbegin-size_type.md index a2fbc994b7..0f3cd70f5a 100644 --- a/reference/unordered_set/unordered_multiset/cbegin-size_type.md +++ b/reference/unordered_set/unordered_multiset/cbegin-size_type.md @@ -6,7 +6,8 @@ * cpp11[meta cpp] ```cpp -const_local_iterator cbegin(size_type n) const; +const_local_iterator cbegin(size_type n) const; // (1) C++11 +constexpr const_local_iterator cbegin(size_type n) const; // (1) C++26 ``` ## 概要 @@ -92,3 +93,7 @@ bucket = 10, bucket_size = 0, keys = { } | [`begin(size_type)`](begin-size_type.md) | インデックス(添え字)で指定したバケット内の先頭要素を指すイテレータを取得 | | [`end(size_type)`](end-size_type.md) | インデックス(添え字)で指定したバケット内の最終要素の次を指すイテレータを取得 | | [`cend(size_type)`](cend-size_type.md) | インデックス(添え字)で指定したバケット内の最終要素の次を指す読み取り専用イテレータを取得 | + + +## 参照 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/unordered_set/unordered_multiset/cbegin.md b/reference/unordered_set/unordered_multiset/cbegin.md index b8965faeb1..213b3284f9 100644 --- a/reference/unordered_set/unordered_multiset/cbegin.md +++ b/reference/unordered_set/unordered_multiset/cbegin.md @@ -6,7 +6,8 @@ * cpp11[meta cpp] ```cpp -const_iterator cbegin() const noexcept; +const_iterator cbegin() const noexcept; // (1) C++11 +constexpr const_iterator cbegin() const noexcept; // (1) C++26 ``` ## 概要 @@ -74,3 +75,7 @@ int main() | [`end(size_type)`](end-size_type.md) | インデックス(添え字)で指定したバケット内の最終要素の次を指すイテレータを取得 | | [`cbegin(size_type)`](cbegin-size_type.md) | インデックス(添え字)で指定したバケット内の先頭要素を指す読み取り専用イテレータを取得 | | [`cend(size_type)`](cend-size_type.md) | インデックス(添え字)で指定したバケット内の最終要素の次を指す読み取り専用イテレータを取得 | + + +## 参照 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/unordered_set/unordered_multiset/cend-size_type.md b/reference/unordered_set/unordered_multiset/cend-size_type.md index 1ad1045aec..8f923ad128 100644 --- a/reference/unordered_set/unordered_multiset/cend-size_type.md +++ b/reference/unordered_set/unordered_multiset/cend-size_type.md @@ -6,7 +6,8 @@ * cpp11[meta cpp] ```cpp -const_local_iterator cend(size_type n) const; +const_local_iterator cend(size_type n) const; // (1) C++11 +constexpr const_local_iterator cend(size_type n) const; // (1) C++26 ``` ## 概要 @@ -92,3 +93,7 @@ bucket = 10, bucket_size = 0, keys = { } | [`begin(size_type)`](begin-size_type.md) | インデックス(添え字)で指定したバケット内の先頭要素を指すイテレータを取得 | | [`end(size_type)`](end-size_type.md) | インデックス(添え字)で指定したバケット内の最終要素の次を指すイテレータを取得 | | [`cbegin(size_type)`](cbegin-size_type.md) | インデックス(添え字)で指定したバケット内の先頭要素を指す読み取り専用イテレータを取得 | + + +## 参照 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/unordered_set/unordered_multiset/cend.md b/reference/unordered_set/unordered_multiset/cend.md index f35d69295c..b45f4d7f40 100644 --- a/reference/unordered_set/unordered_multiset/cend.md +++ b/reference/unordered_set/unordered_multiset/cend.md @@ -6,7 +6,8 @@ * cpp11[meta cpp] ```cpp -const_iterator cend() const noexcept; +const_iterator cend() const noexcept; // (1) C++11 +constexpr const_iterator cend() const noexcept; // (1) C++26 ``` ## 概要 @@ -74,3 +75,7 @@ int main() | [`end(size_type)`](end-size_type.md) | インデックス(添え字)で指定したバケット内の最終要素の次を指すイテレータを取得 | | [`cbegin(size_type)`](cbegin-size_type.md) | インデックス(添え字)で指定したバケット内の先頭要素を指す読み取り専用イテレータを取得 | | [`cend(size_type)`](cend-size_type.md) | インデックス(添え字)で指定したバケット内の最終要素の次を指す読み取り専用イテレータを取得 | + + +## 参照 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/unordered_set/unordered_multiset/clear.md b/reference/unordered_set/unordered_multiset/clear.md index 0f012bdd6a..2300b451ad 100644 --- a/reference/unordered_set/unordered_multiset/clear.md +++ b/reference/unordered_set/unordered_multiset/clear.md @@ -6,7 +6,8 @@ * cpp11[meta cpp] ```cpp -void clear() noexcept; +void clear() noexcept; // (1) C++11 +constexpr void clear() noexcept; // (1) C++26 ``` ## 概要 @@ -99,3 +100,7 @@ true | [`insert`](insert.md) | 要素の追加 | | [`erase`](erase.md) | 要素の削除 | | [`swap`](swap.md) | 内容の交換 | + + +## 参照 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/unordered_set/unordered_multiset/contains.md b/reference/unordered_set/unordered_multiset/contains.md index 49d00282e4..2e204ad071 100644 --- a/reference/unordered_set/unordered_multiset/contains.md +++ b/reference/unordered_set/unordered_multiset/contains.md @@ -6,10 +6,13 @@ * cpp20[meta cpp] ```cpp -bool contains(const key_type& x) const; // (1) +bool contains(const key_type& x) const; // (1) C++20 +constexpr bool contains(const key_type& x) const; // (1) C++26 template -bool contains(const K& k) const; // (2) +bool contains(const K& k) const; // (2) C++20 +template +constexpr bool contains(const K& k) const; // (2) C++26 ``` ## 概要 @@ -79,3 +82,4 @@ contain ## 参照 - [P0458R2 Checking for Existence of an Element in Associative Containers](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2018/p0458r2.html) - [P0919R3 Heterogeneous lookup for unordered containers](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2018/p0919r3.html) +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/unordered_set/unordered_multiset/count.md b/reference/unordered_set/unordered_multiset/count.md index 3acc615510..ac22ed5860 100644 --- a/reference/unordered_set/unordered_multiset/count.md +++ b/reference/unordered_set/unordered_multiset/count.md @@ -6,10 +6,13 @@ * cpp11[meta cpp] ```cpp -size_type count(const key_type& x) const; // (1) C++11 +size_type count(const key_type& x) const; // (1) C++11 +constexpr size_type count(const key_type& x) const; // (1) C++26 template -size_type count(const K& k) const; // (2) C++20 +size_type count(const K& k) const; // (2) C++20 +template +constexpr size_type count(const K& k) const; // (2) C++26 ``` ## 概要 @@ -96,3 +99,4 @@ count of 8:0 ## 参照 - [LWG Issue 2304. Complexity of `count` in unordered associative containers](http://www.open-std.org/jtc1/sc22/wg21/docs/lwg-defects.html#2304) - [P0919R3 Heterogeneous lookup for unordered containers](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2018/p0919r3.html) +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/unordered_set/unordered_multiset/emplace.md b/reference/unordered_set/unordered_multiset/emplace.md index 3e57dd12b5..db3ed4ff23 100644 --- a/reference/unordered_set/unordered_multiset/emplace.md +++ b/reference/unordered_set/unordered_multiset/emplace.md @@ -7,7 +7,9 @@ ```cpp template -iterator emplace(Args&&... args); +iterator emplace(Args&&... args); // (1) C++11 +template +constexpr iterator emplace(Args&&... args); // (1) C++26 ``` ## 概要 @@ -159,3 +161,4 @@ int main() ## 参照 - [N2680 Proposed Wording for Placement Insert (Revision 1)](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2680.pdf) +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/unordered_set/unordered_multiset/emplace_hint.md b/reference/unordered_set/unordered_multiset/emplace_hint.md index a9d2733116..378fc8502a 100644 --- a/reference/unordered_set/unordered_multiset/emplace_hint.md +++ b/reference/unordered_set/unordered_multiset/emplace_hint.md @@ -7,7 +7,9 @@ ```cpp template -iterator emplace_hint(const_iterator position, Args&&... args); +iterator emplace_hint(const_iterator position, Args&&... args); // (1) C++11 +template +constexpr iterator emplace_hint(const_iterator position, Args&&... args); // (1) C++26 ``` ## 概要 @@ -193,3 +195,4 @@ int main() ## 参照 - [N2680 Proposed Wording for Placement Insert (Revision 1)](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2680.pdf) +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/unordered_set/unordered_multiset/empty.md b/reference/unordered_set/unordered_multiset/empty.md index dbb0d9028d..4de16f3102 100644 --- a/reference/unordered_set/unordered_multiset/empty.md +++ b/reference/unordered_set/unordered_multiset/empty.md @@ -6,9 +6,9 @@ * cpp11[meta cpp] ```cpp -bool empty() const noexcept; // C++11 -[[nodiscard]] bool empty() const noexcept; // C++20 -bool empty() const noexcept; // C++26 +bool empty() const noexcept; // (1) C++11 +[[nodiscard]] bool empty() const noexcept; // (1) C++20 +constexpr bool empty() const noexcept; // (1) C++26 ``` ## 概要 @@ -97,3 +97,4 @@ inline bool unordered_multiset::empty() const noexce - C++20で`[[nodiscard]]`が付加された - [P2422R1 Remove `nodiscard` annotations from the standard library specification](https://open-std.org/jtc1/sc22/wg21/docs/papers/2024/p2422r1.html) - C++26で`[[nodiscard]]`指定が削除された +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/unordered_set/unordered_multiset/end-size_type.md b/reference/unordered_set/unordered_multiset/end-size_type.md index e29c963c15..41f5a3b7ea 100644 --- a/reference/unordered_set/unordered_multiset/end-size_type.md +++ b/reference/unordered_set/unordered_multiset/end-size_type.md @@ -6,8 +6,11 @@ * cpp11[meta cpp] ```cpp -local_iterator end(size_type n); -const_local_iterator end(size_type n) const; +local_iterator end(size_type n); // (1) C++11 +constexpr local_iterator end(size_type n); // (1) C++26 + +const_local_iterator end(size_type n) const; // (2) C++11 +constexpr const_local_iterator end(size_type n) const; // (2) C++26 ``` ## 概要 @@ -99,3 +102,7 @@ bucket = 10, bucket_size = 0, keys = { } | [`begin(size_type)`](begin-size_type.md) | インデックス(添え字)で指定したバケット内の先頭要素を指すイテレータを取得 | | [`cbegin(size_type)`](cbegin-size_type.md) | インデックス(添え字)で指定したバケット内の先頭要素を指す読み取り専用イテレータを取得 | | [`cend(size_type)`](cend-size_type.md) | インデックス(添え字)で指定したバケット内の最終要素の次を指す読み取り専用イテレータを取得 | + + +## 参照 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/unordered_set/unordered_multiset/end.md b/reference/unordered_set/unordered_multiset/end.md index 7871a16ede..1af141f19a 100644 --- a/reference/unordered_set/unordered_multiset/end.md +++ b/reference/unordered_set/unordered_multiset/end.md @@ -6,8 +6,11 @@ * cpp11[meta cpp] ```cpp -iterator end() noexcept; -const_iterator end() const noexcept; +iterator end() noexcept; // (1) C++11 +constexpr iterator end() noexcept; // (1) C++26 + +const_iterator end() const noexcept; // (2) C++11 +constexpr const_iterator end() const noexcept; // (2) C++26 ``` ## 概要 @@ -86,3 +89,7 @@ int main() | [`end(size_type)`](end-size_type.md) | インデックス(添え字)で指定したバケット内の最終要素の次を指すイテレータを取得 | | [`cbegin(size_type)`](cbegin-size_type.md) | インデックス(添え字)で指定したバケット内の先頭要素を指す読み取り専用イテレータを取得 | | [`cend(size_type)`](cend-size_type.md) | インデックス(添え字)で指定したバケット内の最終要素の次を指す読み取り専用イテレータを取得 | + + +## 参照 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/unordered_set/unordered_multiset/equal_range.md b/reference/unordered_set/unordered_multiset/equal_range.md index e3e72b330d..edaa11ed50 100644 --- a/reference/unordered_set/unordered_multiset/equal_range.md +++ b/reference/unordered_set/unordered_multiset/equal_range.md @@ -7,16 +7,28 @@ ```cpp pair - equal_range(const key_type& x); // (1) C++11 + equal_range(const key_type& x); // (1) C++11 +constexpr pair + equal_range(const key_type& x); // (1) C++26 + pair equal_range(const key_type& x) const; // (2) C++11 +constexpr pair + equal_range(const key_type& x) const; // (2) C++26 template pair - equal_range(const K& k); // (3) C++20 + equal_range(const K& k); // (3) C++20 +template +constexpr pair + equal_range(const K& k); // (3) C++26 + template pair - equal_range(const K& k) const; // (4) C++20 + equal_range(const K& k) const; // (4) C++20 +template +constexpr pair + equal_range(const K& k) const; // (4) C++26 ``` ## 概要 @@ -111,3 +123,4 @@ equal_range(8): [10, 10) ## 参照 - [P0919R3 Heterogeneous lookup for unordered containers](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2018/p0919r3.html) +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/unordered_set/unordered_multiset/erase.md b/reference/unordered_set/unordered_multiset/erase.md index 77ac089067..f36ccf5354 100644 --- a/reference/unordered_set/unordered_multiset/erase.md +++ b/reference/unordered_set/unordered_multiset/erase.md @@ -6,13 +6,17 @@ * cpp11[meta cpp] ```cpp -iterator erase(iterator position); // (1) C++17 +iterator erase(iterator position); // (1) C++17 +constexpr iterator erase(iterator position); // (1) C++26 -iterator erase(const_iterator position); // (2) C++11 +iterator erase(const_iterator position); // (2) C++11 +constexpr iterator erase(const_iterator position); // (2) C++26 -size_type erase(const key_type& k); // (3) C++11 +size_type erase(const key_type& k); // (3) C++11 +constexpr size_type erase(const key_type& k); // (3) C++26 -iterator erase(const_iterator first, const_iterator last); // (4) C++11 +iterator erase(const_iterator first, const_iterator last); // (4) C++11 +constexpr iterator erase(const_iterator first, const_iterator last); // (4) C++26 ``` ## 概要 @@ -203,3 +207,4 @@ int main() - 安定性の保証が規定された経緯のレポート - [LWG Issue 2059. C++0x ambiguity problem with `map::erase`](https://cplusplus.github.io/LWG/issue2059) - C++17で、`erase(iterator)`を追加 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/unordered_set/unordered_multiset/erase_if_free.md b/reference/unordered_set/unordered_multiset/erase_if_free.md index 73d47bfa54..8d6eaa3060 100644 --- a/reference/unordered_set/unordered_multiset/erase_if_free.md +++ b/reference/unordered_set/unordered_multiset/erase_if_free.md @@ -8,7 +8,10 @@ namespace std { template typename unordered_multiset::size_type - erase_if(unordered_multiset& c, Predicate pred); + erase_if(unordered_multiset& c, Predicate pred); // (1) C++20 + template + constexpr typename unordered_multiset::size_type + erase_if(unordered_multiset& c, Predicate pred); // (1) C++26 } ``` @@ -78,3 +81,4 @@ int main() ## 参照 - [P1209R0 Adopt consistent container erasure from Library Fundamentals 2](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2018/p1209r0.html) - [R1115R3 Improving the Return Value of Erase-Like Algorithms II: Free `erase`/`erase_if`](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2019/p1115r3.pdf) +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/unordered_set/unordered_multiset/extract.md b/reference/unordered_set/unordered_multiset/extract.md index d6de3b38a6..8d01484356 100644 --- a/reference/unordered_set/unordered_multiset/extract.md +++ b/reference/unordered_set/unordered_multiset/extract.md @@ -6,8 +6,11 @@ * cpp17[meta cpp] ```cpp -node_type extract(const_iterator position); (1) -node_type extract(const key_type& x); (2) +node_type extract(const_iterator position); // (1) C++17 +constexpr node_type extract(const_iterator position); // (1) C++26 + +node_type extract(const key_type& x); // (2) C++17 +constexpr node_type extract(const key_type& x); // (2) C++26 ``` ## 概要 @@ -136,3 +139,4 @@ s2 = { 3, 1 } ## 参照 - [Splicing Maps and Sets(Revision 5)](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/p0083r3.pdf) +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/unordered_set/unordered_multiset/find.md b/reference/unordered_set/unordered_multiset/find.md index 92fbd7d2fa..fff82c7629 100644 --- a/reference/unordered_set/unordered_multiset/find.md +++ b/reference/unordered_set/unordered_multiset/find.md @@ -6,11 +6,17 @@ * cpp11[meta cpp] ```cpp -iterator find(const key_type& x); // (1) C++11 -const_iterator find(const key_type& x) const; // (2) C++11 +iterator find(const key_type& x); // (1) C++11 +constexpr iterator find(const key_type& x); // (1) C++26 -template iterator find(const K& k); // (3) C++20 -template const_iterator find(const K& k) const; // (4) C++20 +const_iterator find(const key_type& x) const; // (2) C++11 +constexpr const_iterator find(const key_type& x) const; // (2) C++26 + +template iterator find(const K& k); // (3) C++20 +template constexpr iterator find(const K& k); // (3) C++26 + +template const_iterator find(const K& k) const; // (4) C++20 +template constexpr const_iterator find(const K& k) const; // (4) C++26 ``` ## 概要 @@ -104,3 +110,4 @@ not found ## 参照 - [P0919R3 Heterogeneous lookup for unordered containers](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2018/p0919r3.html) +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/unordered_set/unordered_multiset/get_allocator.md b/reference/unordered_set/unordered_multiset/get_allocator.md index 188715c1e2..db85cb96a0 100644 --- a/reference/unordered_set/unordered_multiset/get_allocator.md +++ b/reference/unordered_set/unordered_multiset/get_allocator.md @@ -6,7 +6,8 @@ * cpp11[meta cpp] ```cpp -allocator_type get_allocator() const noexcept; +allocator_type get_allocator() const noexcept; // (1) C++11 +constexpr allocator_type get_allocator() const noexcept; // (1) C++26 ``` ## 概要 @@ -117,3 +118,7 @@ libstdc++ の `unordered_multiset` では、アロケータの `select_on_contai | [`swap`](swap_free.md) | 内容の交換(非メンバ関数) | | [`allocator`](/reference/memory/allocator.md) | デフォルトのアロケータ | | [`allocator_traits`](/reference/memory/allocator_traits.md) | アロケータのトレイツ | + + +## 参照 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/unordered_set/unordered_multiset/hash_function.md b/reference/unordered_set/unordered_multiset/hash_function.md index 9728be4be8..dc774a3fda 100644 --- a/reference/unordered_set/unordered_multiset/hash_function.md +++ b/reference/unordered_set/unordered_multiset/hash_function.md @@ -6,7 +6,8 @@ * cpp11[meta cpp] ```cpp -hasher hash_function() const; +hasher hash_function() const; // (1) C++11 +constexpr hasher hash_function() const; // (1) C++26 ``` ## 概要 @@ -74,3 +75,7 @@ hash(2) = 2 |-----------------------------------------|------------------------------------------------------| | [`hash`](/reference/functional/hash.md) | デフォルトのハッシュ関数オブジェクト(class template) | | [`key_eq`](key_eq.md) | キー比較用関数オブジェクトの取得 | + + +## 参照 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/unordered_set/unordered_multiset/insert.md b/reference/unordered_set/unordered_multiset/insert.md index 5abaf25734..cf1d1d0a4c 100644 --- a/reference/unordered_set/unordered_multiset/insert.md +++ b/reference/unordered_set/unordered_multiset/insert.md @@ -6,19 +6,31 @@ * cpp11[meta cpp] ```cpp -iterator insert(const value_type& v); -iterator insert(value_type&& rv); // (1) +iterator insert(const value_type& v); // (1) C++11 +constexpr iterator insert(const value_type& v); // (1) C++26 -iterator insert(const_iterator position, const value_type& v); -iterator insert(const_iterator position, value_type&& rv); // (2) +iterator insert(value_type&& rv); // (2) C++11 +constexpr iterator insert(value_type&& rv); // (2) C++26 + +iterator insert(const_iterator position, const value_type& v); // (3) C++11 +constexpr iterator insert(const_iterator position, const value_type& v); // (3) C++26 + +iterator insert(const_iterator position, value_type&& rv); // (4) C++11 +constexpr iterator insert(const_iterator position, value_type&& rv); // (4) C++26 template -void insert(InputIterator first, InputIterator last); // (3) +void insert(InputIterator first, InputIterator last); // (5) C++11 +template +constexpr void insert(InputIterator first, InputIterator last); // (5) C++26 + +void insert(initializer_list il); // (6) C++11 +constexpr void insert(initializer_list il); // (6) C++26 -void insert(initializer_list il); // (4) +iterator insert(node_type&& nh); // (7) C++17 +constexpr iterator insert(node_type&& nh); // (7) C++26 -iterator insert(node_type&& nh); // (5) C++17 -iterator insert(const_iterator hint, node_type&& nh); // (6) C++17 +iterator insert(const_iterator hint, node_type&& nh); // (8) C++17 +constexpr iterator insert(const_iterator hint, node_type&& nh); // (8) C++26 ``` * initializer_list[link /reference/initializer_list/initializer_list.md] @@ -244,3 +256,4 @@ inline void unordered_multiset::insert(std::initiali - [Splicing Maps and Sets(Revision 5)](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/p0083r3.pdf) - (5), (6)経緯となる提案文書 - [How useful is the hint passed to the std::unordered_... collections? - The Old New Thing](https://devblogs.microsoft.com/oldnewthing/20241028-00/?p=110428) +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/unordered_set/unordered_multiset/insert_range.md b/reference/unordered_set/unordered_multiset/insert_range.md index 85efcb9536..c275fb9f26 100644 --- a/reference/unordered_set/unordered_multiset/insert_range.md +++ b/reference/unordered_set/unordered_multiset/insert_range.md @@ -7,7 +7,9 @@ ```cpp template R> -void insert_range(R&& rg); // C++23 +void insert_range(R&& rg); // (1) C++23 +template R> +constexpr void insert_range(R&& rg); // (1) C++26 ``` ## 概要 @@ -70,3 +72,7 @@ int main () | 名前 | 説明 | |-------------------------------------------|----------------------| | [`insert`](insert.md) | 要素の追加 | + + +## 参照 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/unordered_set/unordered_multiset/key_eq.md b/reference/unordered_set/unordered_multiset/key_eq.md index c02bc41b9a..441f417142 100644 --- a/reference/unordered_set/unordered_multiset/key_eq.md +++ b/reference/unordered_set/unordered_multiset/key_eq.md @@ -6,7 +6,8 @@ * cpp11[meta cpp] ```cpp -key_equal key_eq() const; +key_equal key_eq() const; // (1) C++11 +constexpr key_equal key_eq() const; // (1) C++26 ``` ## 概要 @@ -72,3 +73,7 @@ eq(1, 1) = true |----------------------------------------------------|----------------------------------------------| | [`equal_to`](/reference/functional/equal_to.md) | 等値比較演算関数オブジェクト(class template) | | [`hash_function`](hash_function.md) | ハッシュ関数オブジェクトの取得 | + + +## 参照 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/unordered_set/unordered_multiset/load_factor.md b/reference/unordered_set/unordered_multiset/load_factor.md index 1cb5eb2702..4ae9b429f1 100644 --- a/reference/unordered_set/unordered_multiset/load_factor.md +++ b/reference/unordered_set/unordered_multiset/load_factor.md @@ -6,7 +6,8 @@ * cpp11[meta cpp] ```cpp -float load_factor() const noexcept; +float load_factor() const noexcept; // (1) C++11 +constexpr float load_factor() const noexcept; // (1) C++26 ``` ## 概要 @@ -92,3 +93,7 @@ size is 20, bucket_count is 23, load_factor is 0.869565 | [`max_load_factor`](max_load_factor.md) | 負荷率の最大値を取得、設定 | | [`rehash`](rehash.md) | 最小バケット数指定によるバケット数の調整 | | [`reserve`](reserve.md) | 最小要素数指定によるバケット数の調整 | + + +## 参照 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/unordered_set/unordered_multiset/max_bucket_count.md b/reference/unordered_set/unordered_multiset/max_bucket_count.md index c4d4ccf19a..351e549d01 100644 --- a/reference/unordered_set/unordered_multiset/max_bucket_count.md +++ b/reference/unordered_set/unordered_multiset/max_bucket_count.md @@ -6,7 +6,8 @@ * cpp11[meta cpp] ```cpp -size_type max_bucket_count() const noexcept; +size_type max_bucket_count() const noexcept; // (1) C++11 +constexpr size_type max_bucket_count() const noexcept; // (1) C++26 ``` ## 概要 @@ -65,3 +66,7 @@ max bucket count is 2305843009213693951 | [`end(size_type)`](end-size_type.md) | インデックス(添え字)で指定したバケット内の最終要素の次を指すイテレータを取得 | | [`cbegin(size_type)`](cbegin-size_type.md) | インデックス(添え字)で指定したバケット内の先頭要素を指す読み取り専用イテレータを取得 | | [`cend(size_type)`](cend-size_type.md) | インデックス(添え字)で指定したバケット内の最終要素の次を指す読み取り専用イテレータを取得 | + + +## 参照 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/unordered_set/unordered_multiset/max_load_factor.md b/reference/unordered_set/unordered_multiset/max_load_factor.md index 6ed4177f4f..4808876fcd 100644 --- a/reference/unordered_set/unordered_multiset/max_load_factor.md +++ b/reference/unordered_set/unordered_multiset/max_load_factor.md @@ -6,8 +6,11 @@ * cpp11[meta cpp] ```cpp -float max_load_factor() const noexcept; // (1) -void max_load_factor(float z); // (2) +float max_load_factor() const noexcept; // (1) C++11 +constexpr float max_load_factor() const noexcept; // (1) C++26 + +void max_load_factor(float z); // (2) C++11 +constexpr void max_load_factor(float z); // (2) C++26 ``` ## 概要 @@ -183,3 +186,7 @@ size is 27, bucket_count is 29, load_factor is 0.931035, bucket_count * max_load | [`load_factor`](load_factor.md) | 現在の負荷率(バケットあたりの要素数の平均)を取得 | | [`rehash`](rehash.md) | 最小バケット数指定によるバケット数の調整 | | [`reserve`](reserve.md) | 最小要素数指定によるバケット数の調整 | + + +## 参照 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/unordered_set/unordered_multiset/max_size.md b/reference/unordered_set/unordered_multiset/max_size.md index 2f816d1d34..c20ea7b1f2 100644 --- a/reference/unordered_set/unordered_multiset/max_size.md +++ b/reference/unordered_set/unordered_multiset/max_size.md @@ -6,7 +6,8 @@ * cpp11[meta cpp] ```cpp -size_type max_size() const noexcept; +size_type max_size() const noexcept; // (1) C++11 +constexpr size_type max_size() const noexcept; // (1) C++26 ``` ## 概要 @@ -66,3 +67,7 @@ libstdc++ では、コンテナのアロケータ `allocator_type` にメンバ |-----------------------|----------------------------| | [`empty`](empty.md) | コンテナが空かどうかを判定 | | [`size`](size.md) | 要素数の取得 | + + +## 参照 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/unordered_set/unordered_multiset/merge.md b/reference/unordered_set/unordered_multiset/merge.md index ba160b79ef..4951fca192 100644 --- a/reference/unordered_set/unordered_multiset/merge.md +++ b/reference/unordered_set/unordered_multiset/merge.md @@ -7,13 +7,24 @@ ```cpp template - void merge(unordered_set& source); // (1) +void merge(unordered_set& source); // (1) C++17 template - void merge(unordered_set&& source); // (2) +constexpr void merge(unordered_set& source); // (1) C++26 + +template +void merge(unordered_set&& source); // (2) C++17 +template +constexpr void merge(unordered_set&& source); // (2) C++26 + +template +void merge(unordered_multiset& source); // (3) C++17 +template +constexpr void merge(unordered_multiset& source); // (3) C++26 + template - void merge(unordered_multiset& source); // (3) +void merge(unordered_multiset&& source); // (4) C++17 template - void merge(unordered_multiset&& source); // (4) +constexpr void merge(unordered_multiset&& source); // (4) C++26 ``` ## 概要 @@ -85,3 +96,4 @@ s2 = { 10, 10, 20, 30 } ## 参照 - [Splicing Maps and Sets(Revision 5)](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/p0083r3.pdf) +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/unordered_set/unordered_multiset/op_assign.md b/reference/unordered_set/unordered_multiset/op_assign.md index 62ee6e0b7d..a375b9798b 100644 --- a/reference/unordered_set/unordered_multiset/op_assign.md +++ b/reference/unordered_set/unordered_multiset/op_assign.md @@ -6,13 +6,21 @@ * cpp11[meta cpp] ```cpp -unordered_multiset& operator=(const unordered_multiset& v); // (1) -unordered_multiset& operator=(unordered_multiset&& rv); // (2) +unordered_multiset& operator=(const unordered_multiset& v); // (1) C++11 +constexpr unordered_multiset& operator=(const unordered_multiset& v); // (1) C++26 + +unordered_multiset& operator=(unordered_multiset&& rv); // (2) C++11 unordered_multiset & operator=(unordered_multiset&& x) noexcept(allocator_traits::is_always_equal::value && is_nothrow_move_assignable::value && is_nothrow_move_assignable::value); // (2) C++17 -unordered_multiset& operator=(initializer_list il); // (3) +constexpr unordered_multiset & operator=(unordered_multiset&& x) + noexcept(allocator_traits::is_always_equal::value + && is_nothrow_move_assignable::value + && is_nothrow_move_assignable::value); // (2) C++26 + +unordered_multiset& operator=(initializer_list il); // (3) C++11 +constexpr unordered_multiset& operator=(initializer_list il); // (3) C++26 ``` * initializer_list[link /reference/initializer_list/initializer_list.md] @@ -90,3 +98,4 @@ unordered_multiset& operator=(initializer_list il); // (3) - (3)の経緯となる提案文書 - [N4258 Cleaning-up noexcept in the Library, Rev 3](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n4258.pdf) - `noexcept` 追加の経緯となる提案文書 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/unordered_set/unordered_multiset/op_constructor.md b/reference/unordered_set/unordered_multiset/op_constructor.md index 8b7ca6561e..3bd98d667b 100644 --- a/reference/unordered_set/unordered_multiset/op_constructor.md +++ b/reference/unordered_set/unordered_multiset/op_constructor.md @@ -6,93 +6,176 @@ * cpp11[meta cpp] ```cpp -unordered_multiset(); // (1) C++14 - -explicit unordered_multiset(size_type n, - const hasher& hf = hasher(), - const key_equal& eql = key_equal(), - const allocator_type& a = allocator_type()); // (2) C++14 - - -explicit unordered_multiset(size_type n = 実装依存の既定値, - const hasher& hf = hasher(), - const key_equal& eql = key_equal(), - const allocator_type& a = allocator_type()); // (1) + (2) C++11 +unordered_multiset(); // (1) C++14 +constexpr unordered_multiset(); // (1) C++26 + +explicit + unordered_multiset(size_type n, + const hasher& hf = hasher(), + const key_equal& eql = key_equal(), + const allocator_type& a = allocator_type()); // (2) C++14 +constexpr explicit + unordered_multiset(size_type n, + const hasher& hf = hasher(), + const key_equal& eql = key_equal(), + const allocator_type& a = allocator_type()); // (2) C++26 + + +explicit + unordered_multiset(size_type n = 実装依存の既定値, + const hasher& hf = hasher(), + const key_equal& eql = key_equal(), + const allocator_type& a = allocator_type()); // (1) + (2) C++11 template -unordered_multiset(InputIterator first, InputIterator last, +unordered_multiset(InputIterator first, + InputIterator last, size_type n = 実装依存の既定値, const hasher& hf = hasher(), const key_equal& eql = key_equal(), - const allocator_type& a = allocator_type()); // (3) + const allocator_type& a = allocator_type()); // (3) C++11 +template +constexpr + unordered_multiset(InputIterator first, + InputIterator last, + size_type n = 実装依存の既定値, + const hasher& hf = hasher(), + const key_equal& eql = key_equal(), + const allocator_type& a = allocator_type()); // (3) C++26 -unordered_multiset(const unordered_multiset& v); // (4) +unordered_multiset(const unordered_multiset& v); // (4) C++11 +constexpr unordered_multiset(const unordered_multiset& v); // (4) C++26 -unordered_multiset(unordered_multiset&& rv); // (5) +unordered_multiset(unordered_multiset&& rv); // (5) C++11 +constexpr unordered_multiset(unordered_multiset&& rv); // (5) C++26 -explicit unordered_multiset(const allocator_type& a); // (6) +explicit unordered_multiset(const allocator_type& a); // (6) C++11 +constexpr explicit unordered_multiset(const allocator_type& a); // (6) C++26 unordered_multiset(const unordered_multiset& v, - const allocator_type& a); // (7) + const allocator_type& a); // (7) C++11 unordered_multiset(const unordered_multiset& v, - const type_identity_t& a); // (7) C++23 + const type_identity_t& a); // (7) C++23 +constexpr + unordered_multiset(const unordered_multiset& v, + const type_identity_t& a); // (7) C++26 unordered_multiset(unordered_multiset&& rv, - const allocator_type& a); // (8) + const allocator_type& a); // (8) C++11 unordered_multiset(unordered_multiset&& rv, - const type_identity_t& a); // (8) C++23 + const type_identity_t& a); // (8) C++23 +constexpr + unordered_multiset(unordered_multiset&& rv, + const type_identity_t& a); // (8) C++26 unordered_multiset(initializer_list il, size_type n = 実装依存の既定値, const hasher& hf = hasher(), const key_equal& eql = key_equal(), - const allocator_type& a = allocator_type()); // (9) + const allocator_type& a = allocator_type()); // (9) C++11 +constexpr + unordered_multiset(initializer_list il, + size_type n = 実装依存の既定値, + const hasher& hf = hasher(), + const key_equal& eql = key_equal(), + const allocator_type& a = allocator_type()); // (9) C++26 -unordered_multiset(size_type n, const allocator_type& a); // (10) C++14 +unordered_multiset(size_type n, const allocator_type& a); // (10) C++14 +constexpr unordered_multiset(size_type n, const allocator_type& a); // (10) C++26 unordered_multiset(size_type n, const hasher& hf, - const allocator_type& a); // (11) C++14 + const allocator_type& a); // (11) C++14 +constexpr + unordered_multiset(size_type n, + const hasher& hf, + const allocator_type& a); // (11) C++26 template unordered_multiset(InputIterator f, InputIterator l, size_type n, - const allocator_type& a); // (12) C++14 + const allocator_type& a); // (12) C++14 +template +constexpr + unordered_multiset(InputIterator f, + InputIterator l, + size_type n, + const allocator_type& a); // (12) C++26 template unordered_multiset(InputIterator f, InputIterator l, size_type n, const hasher& hf, - const allocator_type& a); // (13) C++14 + const allocator_type& a); // (13) C++14 +template +constexpr + unordered_multiset(InputIterator f, + InputIterator l, + size_type n, + const hasher& hf, + const allocator_type& a); // (13) C++26 unordered_multiset(initializer_list il, size_type n, - const allocator_type& a); // (14) C++14 + const allocator_type& a); // (14) C++14 +constexpr + unordered_multiset(initializer_list il, + size_type n, + const allocator_type& a); // (14) C++26 unordered_multiset(initializer_list il, size_type n, const hasher& hf, - const allocator_type& a); // (15) C++14 + const allocator_type& a); // (15) C++14 +constexpr + unordered_multiset(initializer_list il, + size_type n, + const hasher& hf, + const allocator_type& a); // (15) C++26 template R> -unordered_multiset(std::from_range_t, R&& rg, +unordered_multiset(std::from_range_t, + R&& rg, size_type n = 実装依存の既定値, const hasher& hf = hasher(), const key_equal& eql = key_equal(), - const allocator_type& a = allocator_type()); // (16) C++23 + const allocator_type& a = allocator_type()); // (16) C++23 +template R> +constexpr + unordered_multiset(std::from_range_t, + R&& rg, + size_type n = 実装依存の既定値, + const hasher& hf = hasher(), + const key_equal& eql = key_equal(), + const allocator_type& a = allocator_type()); // (16) C++26 template R> -unordered_multiset(std::from_range_t, R&& rg, +unordered_multiset(std::from_range_t, + R&& rg, size_type n, - const allocator_type& a); // (17) C++23 + const allocator_type& a); // (17) C++23 +template R> +constexpr + unordered_multiset(std::from_range_t, + R&& rg, + size_type n, + const allocator_type& a); // (17) C++26 template R> -unordered_multiset(std::from_range_t, R&& rg, +unordered_multiset(std::from_range_t, + R&& rg, size_type n, const hasher& hf, - const allocator_type& a); // (18) C++23 + const allocator_type& a); // (18) C++23 +template R> +constexpr + unordered_multiset(std::from_range_t, + R&& rg, + size_type n, + const hasher& hf, + const allocator_type& a); // (18) C++26 ``` * type_identity_t[link /reference/type_traits/type_identity.md] * initializer_list[link /reference/initializer_list/initializer_list.md] @@ -278,3 +361,4 @@ libstdc++ には 4.8.2 現在、(6), (7), (8)の形式はない。 なお、Discussion の例はアロケータの型が誤っているので注意 - [P1518R2 Stop Overconstraining Allocators in Container Deduction Guides](https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2021/p1518r2.html) - C++23でのアロケータ引数を`type_identity_t`で包む変更 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/unordered_set/unordered_multiset/op_destructor.md b/reference/unordered_set/unordered_multiset/op_destructor.md index 862734efbe..6cb8fc1f6d 100644 --- a/reference/unordered_set/unordered_multiset/op_destructor.md +++ b/reference/unordered_set/unordered_multiset/op_destructor.md @@ -6,7 +6,8 @@ * cpp11[meta cpp] ```cpp -~unordered_multiset(); +~unordered_multiset(); // (1) C++11 +constexpr ~unordered_multiset(); // (1) C++26 ``` ## 概要 @@ -37,3 +38,7 @@ |--------------------------------------------|----------------| | [`(constructor)`](op_constructor.md) | コンストラクタ | | [`operator=`](op_assign.md) | 代入演算子 | + + +## 参照 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/unordered_set/unordered_multiset/op_equal.md b/reference/unordered_set/unordered_multiset/op_equal.md index 090f483c5a..4254e3fe30 100644 --- a/reference/unordered_set/unordered_multiset/op_equal.md +++ b/reference/unordered_set/unordered_multiset/op_equal.md @@ -9,6 +9,9 @@ namespace std { template bool operator==(const unordered_multiset& a, const unordered_multiset& b); // (1) C++11 + template + constexpr bool operator==(const unordered_multiset& a, + const unordered_multiset& b); // (1) C++26 } ``` @@ -138,3 +141,4 @@ namespace std { - [P0809R0 Comparing Unordered Containers](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2018/p0809r0.pdf) - [P1614R2 The Mothership has Landed](https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2019/p1614r2.html) - C++20での三方比較演算子の追加と、関連する演算子の自動導出 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/unordered_set/unordered_multiset/op_not_equal.md b/reference/unordered_set/unordered_multiset/op_not_equal.md index 6a9927edff..730e134da9 100644 --- a/reference/unordered_set/unordered_multiset/op_not_equal.md +++ b/reference/unordered_set/unordered_multiset/op_not_equal.md @@ -10,6 +10,9 @@ namespace std { template bool operator!=(const unordered_multiset& a, const unordered_multiset& b); // (1) C++11 + template + constexpr bool operator!=(const unordered_multiset& a, + const unordered_multiset& b); // (1) C++26 } ``` @@ -124,3 +127,4 @@ namespace std { - [P0809R0 Comparing Unordered Containers](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2018/p0809r0.pdf) - [P1614R2 The Mothership has Landed](https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2019/p1614r2.html) - C++20での三方比較演算子の追加と、関連する演算子の自動導出 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/unordered_set/unordered_multiset/rehash.md b/reference/unordered_set/unordered_multiset/rehash.md index c66bad51d8..c6a73a542c 100644 --- a/reference/unordered_set/unordered_multiset/rehash.md +++ b/reference/unordered_set/unordered_multiset/rehash.md @@ -6,7 +6,8 @@ * cpp11[meta cpp] ```cpp -void rehash(size_type n); +void rehash(size_type n); // (1) C++11 +constexpr void rehash(size_type n); // (1) C++26 ``` ## 概要 @@ -98,3 +99,7 @@ bucket_count is 13 | [`load_factor`](load_factor.md) | 現在の負荷率(バケットあたりの要素数の平均)を取得 | | [`max_load_factor`](max_load_factor.md) | 負荷率の最大値を取得、設定 | | [`reserve`](reserve.md) | 最小要素数指定によるバケット数の調整 | + + +## 参照 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/unordered_set/unordered_multiset/reserve.md b/reference/unordered_set/unordered_multiset/reserve.md index 31d7f45003..4b2db37b59 100644 --- a/reference/unordered_set/unordered_multiset/reserve.md +++ b/reference/unordered_set/unordered_multiset/reserve.md @@ -6,7 +6,8 @@ * cpp11[meta cpp] ```cpp -void reserve(size_type n); +void reserve(size_type n); // (1) C++11 +constexpr void reserve(size_type n); // (1) C++26 ``` ## 概要 @@ -104,3 +105,7 @@ bucket_count is 13 | [`insert`](insert.md) | 要素の追加 | | [`emplace`](emplace.md) | コンテナ内への要素の直接構築 | | [`emplace_hint`](emplace_hint.md) | 挿入位置のヒントを使用したコンテナ内への要素の直接構築 | + + +## 参照 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/unordered_set/unordered_multiset/size.md b/reference/unordered_set/unordered_multiset/size.md index dba16be1bb..42f6e82095 100644 --- a/reference/unordered_set/unordered_multiset/size.md +++ b/reference/unordered_set/unordered_multiset/size.md @@ -6,7 +6,8 @@ * cpp11[meta cpp] ```cpp -size_type size() const noexcept; +size_type size() const noexcept; // (1) C++11 +constexpr size_type size() const noexcept; // (1) C++26 ``` ## 概要 @@ -70,3 +71,7 @@ int main() | [`begin`](begin.md) | 先頭要素を指すイテレータの取得 | | [`end`](end.md) | 最終要素の次を指すイテレータの取得 | | [`distance`](/reference/iterator/distance.md) | イテレータ間の距離を求める | + + +## 参照 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/unordered_set/unordered_multiset/swap.md b/reference/unordered_set/unordered_multiset/swap.md index 570d1b90d8..b2aa0840d7 100644 --- a/reference/unordered_set/unordered_multiset/swap.md +++ b/reference/unordered_set/unordered_multiset/swap.md @@ -6,11 +6,15 @@ * cpp11[meta cpp] ```cpp -void swap(unordered_multiset& v); +void swap(unordered_multiset& v); // (1) C++11 void swap(unordered_multiset& x) noexcept(allocator_traits::is_always_equal::value && noexcept(swap(declval(),declval())) - && noexcept(swap(declval(),declval()))); // C++17 + && noexcept(swap(declval(),declval()))); // (1) C++17 +constexpr void swap(unordered_multiset& x) + noexcept(allocator_traits::is_always_equal::value + && noexcept(swap(declval(),declval())) + && noexcept(swap(declval(),declval()))); // (1) C++26 ``` ## 概要 @@ -116,3 +120,4 @@ ums2 after : 9 9 7 7 5 5 1 1 3 3 ## 参照 - [N4258 Cleaning-up noexcept in the Library, Rev 3](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n4258.pdf) - `noexcept` 追加の経緯となる提案文書 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/unordered_set/unordered_multiset/swap_free.md b/reference/unordered_set/unordered_multiset/swap_free.md index a0ae45e1d6..acea0178ff 100644 --- a/reference/unordered_set/unordered_multiset/swap_free.md +++ b/reference/unordered_set/unordered_multiset/swap_free.md @@ -7,13 +7,19 @@ ```cpp namespace std { template - void swap(unordered_multiset& x, - unordered_multiset& y); - + void + swap(unordered_multiset& x, + unordered_multiset& y); // (1) C++11 template - void swap(unordered_multiset& x, - unordered_multiset& y) - noexcept(noexcept(x.swap(y))); // C++17 + void + swap(unordered_multiset& x, + unordered_multiset& y) + noexcept(noexcept(x.swap(y))); // (1) C++17 + template + constexpr void + swap(unordered_multiset& x, + unordered_multiset& y) + noexcept(noexcept(x.swap(y))); // (1) C++26 } ``` @@ -107,3 +113,4 @@ namespace std { ## 参照 - [N4258 Cleaning-up noexcept in the Library, Rev 3](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n4258.pdf) - `noexcept` 追加の経緯となる提案文書 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/unordered_set/unordered_set/begin-size_type.md b/reference/unordered_set/unordered_set/begin-size_type.md index 2a0f00a7ea..2e22ca58f6 100644 --- a/reference/unordered_set/unordered_set/begin-size_type.md +++ b/reference/unordered_set/unordered_set/begin-size_type.md @@ -6,8 +6,11 @@ * cpp11[meta cpp] ```cpp -local_iterator begin(size_type n); -const_local_iterator begin(size_type n) const; +local_iterator begin(size_type n); // (1) C++11 +constexpr local_iterator begin(size_type n); // (1) C++26 + +const_local_iterator begin(size_type n) const; // (2) C++11 +constexpr const_local_iterator begin(size_type n) const; // (2) C++26 ``` ## 概要 @@ -93,3 +96,7 @@ bucket = 4, bucket_size = 2, keys = { C, B, } | [`end(size_type)`](end-size_type.md) | インデックス(添え字)で指定したバケット内の最終要素の次を指すイテレータを取得 | | [`cbegin(size_type)`](cbegin-size_type.md) | インデックス(添え字)で指定したバケット内の先頭要素を指す読み取り専用イテレータを取得 | | [`cend(size_type)`](cend-size_type.md) | インデックス(添え字)で指定したバケット内の最終要素の次を指す読み取り専用イテレータを取得 | + + +## 参照 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/unordered_set/unordered_set/begin.md b/reference/unordered_set/unordered_set/begin.md index a0a5ea36f7..0bbd3c6929 100644 --- a/reference/unordered_set/unordered_set/begin.md +++ b/reference/unordered_set/unordered_set/begin.md @@ -6,8 +6,11 @@ * cpp11[meta cpp] ```cpp -iterator begin() noexcept; -const_iterator begin() const noexcept; +iterator begin() noexcept; // (1) C++11 +constexpr iterator begin() noexcept; // (1) C++26 + +const_iterator begin() const noexcept; // (2) C++11 +constexpr const_iterator begin() const noexcept; // (2) C++26 ``` ## 概要 @@ -87,3 +90,7 @@ int main() | [`end(size_type)`](end-size_type.md) | インデックス(添え字)で指定したバケット内の最終要素の次を指すイテレータを取得 | | [`cbegin(size_type)`](cbegin-size_type.md) | インデックス(添え字)で指定したバケット内の先頭要素を指す読み取り専用イテレータを取得 | | [`cend(size_type)`](cend-size_type.md) | インデックス(添え字)で指定したバケット内の最終要素の次を指す読み取り専用イテレータを取得 | + + +## 参照 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/unordered_set/unordered_set/bucket.md b/reference/unordered_set/unordered_set/bucket.md index 31b1828818..0b2ed13dd4 100644 --- a/reference/unordered_set/unordered_set/bucket.md +++ b/reference/unordered_set/unordered_set/bucket.md @@ -6,10 +6,11 @@ * cpp11[meta cpp] ```cpp -size_type bucket(const key_type& k) const; // (1) C++11 +size_type bucket(const key_type& k) const; // (1) C++11 +constexpr size_type bucket(const key_type& k) const; // (1) C++26 template -size_type bucket(const K& k) const; // (2) C++26 +constexpr size_type bucket(const K& k) const; // (2) C++26 ``` ## 概要 @@ -107,3 +108,4 @@ key = H, bucket = 2, bucket_size = 0 ## 参照 - [P2363R5 Extending associative containers with the remaining heterogeneous overloads](http://open-std.org/jtc1/sc22/wg21/docs/papers/2023/p2363r5.html) - C++26で`template `のバージョンが追加された +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/unordered_set/unordered_set/bucket_count.md b/reference/unordered_set/unordered_set/bucket_count.md index 4d043bacb5..6b251e60af 100644 --- a/reference/unordered_set/unordered_set/bucket_count.md +++ b/reference/unordered_set/unordered_set/bucket_count.md @@ -6,7 +6,8 @@ * cpp11[meta cpp] ```cpp -size_type bucket_count() const noexcept; +size_type bucket_count() const noexcept; // (1) C++11 +constexpr size_type bucket_count() const noexcept; // (1) C++26 ``` ## 概要 @@ -65,3 +66,7 @@ bucket count is 5 | [`end(size_type)`](end-size_type.md) | インデックス(添え字)で指定したバケット内の最終要素の次を指すイテレータを取得 | | [`cbegin(size_type)`](cbegin-size_type.md) | インデックス(添え字)で指定したバケット内の先頭要素を指す読み取り専用イテレータを取得 | | [`cend(size_type)`](cend-size_type.md) | インデックス(添え字)で指定したバケット内の最終要素の次を指す読み取り専用イテレータを取得 | + + +## 参照 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/unordered_set/unordered_set/bucket_size.md b/reference/unordered_set/unordered_set/bucket_size.md index 8175673c52..7e6e471953 100644 --- a/reference/unordered_set/unordered_set/bucket_size.md +++ b/reference/unordered_set/unordered_set/bucket_size.md @@ -6,7 +6,8 @@ * cpp11[meta cpp] ```cpp -size_type bucket_size(size_type n) const; +size_type bucket_size(size_type n) const; // (1) C++11 +constexpr size_type bucket_size(size_type n) const; // (1) C++26 ``` ## 概要 @@ -84,3 +85,7 @@ bucket = 4, bucket_size = 2, keys = { C, B, } | [`end(size_type)`](end-size_type.md) | インデックス(添え字)で指定したバケット内の最終要素の次を指すイテレータを取得 | | [`cbegin(size_type)`](cbegin-size_type.md) | インデックス(添え字)で指定したバケット内の先頭要素を指す読み取り専用イテレータを取得 | | [`cend(size_type)`](cend-size_type.md) | インデックス(添え字)で指定したバケット内の最終要素の次を指す読み取り専用イテレータを取得 | + + +## 参照 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/unordered_set/unordered_set/cbegin-size_type.md b/reference/unordered_set/unordered_set/cbegin-size_type.md index 9df15be329..fd4119b10c 100644 --- a/reference/unordered_set/unordered_set/cbegin-size_type.md +++ b/reference/unordered_set/unordered_set/cbegin-size_type.md @@ -6,7 +6,8 @@ * cpp11[meta cpp] ```cpp -const_local_iterator cbegin(size_type n) const; +const_local_iterator cbegin(size_type n) const; // (1) C++11 +constexpr const_local_iterator cbegin(size_type n) const; // (1) C++26 ``` ## 概要 @@ -86,3 +87,7 @@ bucket = 4, bucket_size = 2, keys = { C, B, } | [`begin(size_type)`](begin-size_type.md) | インデックス(添え字)で指定したバケット内の先頭要素を指すイテレータを取得 | | [`end(size_type)`](end-size_type.md) | インデックス(添え字)で指定したバケット内の最終要素の次を指すイテレータを取得 | | [`cend(size_type)`](cend-size_type.md) | インデックス(添え字)で指定したバケット内の最終要素の次を指す読み取り専用イテレータを取得 | + + +## 参照 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/unordered_set/unordered_set/cbegin.md b/reference/unordered_set/unordered_set/cbegin.md index e47ebd7a92..0875d7ae61 100644 --- a/reference/unordered_set/unordered_set/cbegin.md +++ b/reference/unordered_set/unordered_set/cbegin.md @@ -6,7 +6,8 @@ * cpp11[meta cpp] ```cpp -const_iterator cbegin() const noexcept; +const_iterator cbegin() const noexcept; // (1) C++11 +constexpr const_iterator cbegin() const noexcept; // (1) C++26 ``` ## 概要 @@ -74,3 +75,7 @@ int main() | [`end(size_type)`](end-size_type.md) | インデックス(添え字)で指定したバケット内の最終要素の次を指すイテレータを取得 | | [`cbegin(size_type)`](cbegin-size_type.md) | インデックス(添え字)で指定したバケット内の先頭要素を指す読み取り専用イテレータを取得 | | [`cend(size_type)`](cend-size_type.md) | インデックス(添え字)で指定したバケット内の最終要素の次を指す読み取り専用イテレータを取得 | + + +## 参照 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/unordered_set/unordered_set/cend-size_type.md b/reference/unordered_set/unordered_set/cend-size_type.md index 9586e16011..80ff967c1e 100644 --- a/reference/unordered_set/unordered_set/cend-size_type.md +++ b/reference/unordered_set/unordered_set/cend-size_type.md @@ -6,7 +6,8 @@ * cpp11[meta cpp] ```cpp -const_local_iterator cend(size_type n) const; +const_local_iterator cend(size_type n) const; // (1) C++11 +constexpr const_local_iterator cend(size_type n) const; // (1) C++26 ``` ## 概要 @@ -86,3 +87,7 @@ bucket = 4, bucket_size = 2, keys = { C, B, } | [`begin(size_type)`](begin-size_type.md) | インデックス(添え字)で指定したバケット内の先頭要素を指すイテレータを取得 | | [`end(size_type)`](end-size_type.md) | インデックス(添え字)で指定したバケット内の最終要素の次を指すイテレータを取得 | | [`cbegin(size_type)`](cbegin-size_type.md) | インデックス(添え字)で指定したバケット内の先頭要素を指す読み取り専用イテレータを取得 | + + +## 参照 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/unordered_set/unordered_set/cend.md b/reference/unordered_set/unordered_set/cend.md index 7d73bafd15..62b8aecdae 100644 --- a/reference/unordered_set/unordered_set/cend.md +++ b/reference/unordered_set/unordered_set/cend.md @@ -6,7 +6,8 @@ * cpp11[meta cpp] ```cpp -const_iterator cend() const noexcept; +const_iterator cend() const noexcept; // (1) C++11 +constexpr const_iterator cend() const noexcept; // (1) C++26 ``` ## 概要 @@ -74,3 +75,7 @@ int main() | [`end(size_type)`](end-size_type.md) | インデックス(添え字)で指定したバケット内の最終要素の次を指すイテレータを取得 | | [`cbegin(size_type)`](cbegin-size_type.md) | インデックス(添え字)で指定したバケット内の先頭要素を指す読み取り専用イテレータを取得 | | [`cend(size_type)`](cend-size_type.md) | インデックス(添え字)で指定したバケット内の最終要素の次を指す読み取り専用イテレータを取得 | + + +## 参照 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/unordered_set/unordered_set/clear.md b/reference/unordered_set/unordered_set/clear.md index eee1da28c5..48dfd50758 100644 --- a/reference/unordered_set/unordered_set/clear.md +++ b/reference/unordered_set/unordered_set/clear.md @@ -6,7 +6,8 @@ * cpp11[meta cpp] ```cpp -void clear() noexcept; +void clear() noexcept; // (1) C++11 +constexpr void clear() noexcept; // (1) C++26 ``` ## 概要 @@ -99,3 +100,7 @@ true | [`insert`](insert.md) | 要素の追加 | | [`erase`](erase.md) | 要素の削除 | | [`swap`](swap.md) | 内容の交換 | + + +## 参照 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/unordered_set/unordered_set/contains.md b/reference/unordered_set/unordered_set/contains.md index b58d453134..5ec73b45ac 100644 --- a/reference/unordered_set/unordered_set/contains.md +++ b/reference/unordered_set/unordered_set/contains.md @@ -6,10 +6,13 @@ * cpp20[meta cpp] ```cpp -bool contains(const key_type& x) const; // (1) +bool contains(const key_type& x) const; // (1) C++20 +constexpr bool contains(const key_type& x) const; // (1) C++26 template -bool contains(const K& k) const; // (2) +bool contains(const K& k) const; // (2) C++20 +template +constexpr bool contains(const K& k) const; // (2) C++26 ``` ## 概要 @@ -77,3 +80,4 @@ contain ## 参照 - [P0458R2 Checking for Existence of an Element in Associative Containers](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2018/p0458r2.html) - [P0919R3 Heterogeneous lookup for unordered containers](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2018/p0919r3.html) +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/unordered_set/unordered_set/count.md b/reference/unordered_set/unordered_set/count.md index 3e4c367ea4..6f0148e574 100644 --- a/reference/unordered_set/unordered_set/count.md +++ b/reference/unordered_set/unordered_set/count.md @@ -6,10 +6,13 @@ * cpp11[meta cpp] ```cpp -size_type count(const key_type& x) const; // (1) C++11 +size_type count(const key_type& x) const; // (1) C++11 +constexpr size_type count(const key_type& x) const; // (1) C++26 template -size_type count(const K& k) const; // (2) C++20 +size_type count(const K& k) const; // (2) C++20 +template +constexpr size_type count(const K& k) const; // (2) C++26 ``` ## 概要 @@ -96,3 +99,4 @@ count of 8:0 ## 参照 - [LWG Issue 2304. Complexity of `count` in unordered associative containers](http://www.open-std.org/jtc1/sc22/wg21/docs/lwg-defects.html#2304) - [P0919R3 Heterogeneous lookup for unordered containers](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2018/p0919r3.html) +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/unordered_set/unordered_set/emplace.md b/reference/unordered_set/unordered_set/emplace.md index 71061c574e..a80892bc53 100644 --- a/reference/unordered_set/unordered_set/emplace.md +++ b/reference/unordered_set/unordered_set/emplace.md @@ -7,7 +7,9 @@ ```cpp template -pair emplace(Args&&... args); +pair emplace(Args&&... args); // (1) C++11 +template +constexpr pair emplace(Args&&... args); // (1) C++26 ``` ## 概要 @@ -174,3 +176,4 @@ int main() ## 参照 - [N2680 Proposed Wording for Placement Insert (Revision 1)](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2680.pdf) +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/unordered_set/unordered_set/emplace_hint.md b/reference/unordered_set/unordered_set/emplace_hint.md index 7acff85326..d1a575e7d0 100644 --- a/reference/unordered_set/unordered_set/emplace_hint.md +++ b/reference/unordered_set/unordered_set/emplace_hint.md @@ -7,7 +7,9 @@ ```cpp template -iterator emplace_hint(const_iterator position, Args&&... args); +iterator emplace_hint(const_iterator position, Args&&... args); // (1) C++11 +template +constexpr iterator emplace_hint(const_iterator position, Args&&... args); // (1) C++26 ``` ## 概要 @@ -170,3 +172,4 @@ int main() ## 参照 - [N2680 Proposed Wording for Placement Insert (Revision 1)](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2680.pdf) +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/unordered_set/unordered_set/empty.md b/reference/unordered_set/unordered_set/empty.md index 0dd50e231c..eb26840175 100644 --- a/reference/unordered_set/unordered_set/empty.md +++ b/reference/unordered_set/unordered_set/empty.md @@ -6,9 +6,9 @@ * cpp11[meta cpp] ```cpp -bool empty() const noexcept; // C++11 -[[nodiscard]] bool empty() const noexcept; // C++20 -bool empty() const noexcept; // C++26 +bool empty() const noexcept; // (1) C++11 +[[nodiscard]] bool empty() const noexcept; // (1) C++20 +constexpr bool empty() const noexcept; // (1) C++26 ``` ## 概要 @@ -97,3 +97,4 @@ inline bool unordered_set::empty() const noexcept { - C++20で`[[nodiscard]]`が付加された - [P2422R1 Remove `nodiscard` annotations from the standard library specification](https://open-std.org/jtc1/sc22/wg21/docs/papers/2024/p2422r1.html) - C++26で`[[nodiscard]]`指定が削除された +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/unordered_set/unordered_set/end-size_type.md b/reference/unordered_set/unordered_set/end-size_type.md index 74ce0eeebd..69b16eb695 100644 --- a/reference/unordered_set/unordered_set/end-size_type.md +++ b/reference/unordered_set/unordered_set/end-size_type.md @@ -6,8 +6,11 @@ * cpp11[meta cpp] ```cpp -local_iterator end(size_type n); -const_local_iterator end(size_type n) const; +local_iterator end(size_type n); // (1) C++11 +constexpr local_iterator end(size_type n); // (1) C++26 + +const_local_iterator end(size_type n) const; // (2) C++11 +constexpr const_local_iterator end(size_type n) const; // (2) C++26 ``` ## 概要 @@ -93,3 +96,7 @@ bucket = 4, bucket_size = 2, keys = { C, B, } | [`begin(size_type)`](begin-size_type.md) | インデックス(添え字)で指定したバケット内の先頭要素を指すイテレータを取得 | | [`cbegin(size_type)`](cbegin-size_type.md) | インデックス(添え字)で指定したバケット内の先頭要素を指す読み取り専用イテレータを取得 | | [`cend(size_type)`](cend-size_type.md) | インデックス(添え字)で指定したバケット内の最終要素の次を指す読み取り専用イテレータを取得 | + + +## 参照 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/unordered_set/unordered_set/end.md b/reference/unordered_set/unordered_set/end.md index cd0a4e2688..79d29e801a 100644 --- a/reference/unordered_set/unordered_set/end.md +++ b/reference/unordered_set/unordered_set/end.md @@ -6,8 +6,11 @@ * cpp11[meta cpp] ```cpp -iterator end() noexcept; -const_iterator end() const noexcept; +iterator end() noexcept; // (1) C++11 +constexpr iterator end() noexcept; // (1) C++26 + +const_iterator end() const noexcept; // (2) C++11 +constexpr const_iterator end() const noexcept; // (2) C++26 ``` ## 概要 @@ -86,3 +89,7 @@ int main() | [`end(size_type)`](end-size_type.md) | インデックス(添え字)で指定したバケット内の最終要素の次を指すイテレータを取得 | | [`cbegin(size_type)`](cbegin-size_type.md) | インデックス(添え字)で指定したバケット内の先頭要素を指す読み取り専用イテレータを取得 | | [`cend(size_type)`](cend-size_type.md) | インデックス(添え字)で指定したバケット内の最終要素の次を指す読み取り専用イテレータを取得 | + + +## 参照 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/unordered_set/unordered_set/equal_range.md b/reference/unordered_set/unordered_set/equal_range.md index e675e5b6ba..04a95b22c9 100644 --- a/reference/unordered_set/unordered_set/equal_range.md +++ b/reference/unordered_set/unordered_set/equal_range.md @@ -7,16 +7,28 @@ ```cpp pair - equal_range(const key_type& x); // (1) C++11 + equal_range(const key_type& x); // (1) C++11 +constexpr pair + equal_range(const key_type& x); // (1) C++26 + pair equal_range(const key_type& x) const; // (2) C++11 +constexpr pair + equal_range(const key_type& x) const; // (2) C++26 template pair - equal_range(const K& k); // (3) C++20 + equal_range(const K& k); // (3) C++20 +template +constexpr pair + equal_range(const K& k); // (3) C++26 + template pair - equal_range(const K& k) const; // (4) C++20 + equal_range(const K& k) const; // (4) C++20 +template +constexpr pair + equal_range(const K& k) const; // (4) C++26 ``` ## 概要 @@ -113,3 +125,4 @@ equal_range(8): [5, 5) ## 参照 - [P0919R3 Heterogeneous lookup for unordered containers](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2018/p0919r3.html) +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/unordered_set/unordered_set/erase.md b/reference/unordered_set/unordered_set/erase.md index f9d80f8753..64fcfe5b21 100644 --- a/reference/unordered_set/unordered_set/erase.md +++ b/reference/unordered_set/unordered_set/erase.md @@ -6,13 +6,17 @@ * cpp11[meta cpp] ```cpp -iterator erase(iterator position); // (1) C++17 +iterator erase(iterator position); // (1) C++17 +constexpr iterator erase(iterator position); // (1) C++26 -iterator erase(const_iterator position); // (2) C++11 +iterator erase(const_iterator position); // (2) C++11 +constexpr iterator erase(const_iterator position); // (2) C++26 -size_type erase(const key_type& k); // (3) C++11 +size_type erase(const key_type& k); // (3) C++11 +constexpr size_type erase(const key_type& k); // (3) C++26 -iterator erase(const_iterator first, const_iterator last); // (4) C++11 +iterator erase(const_iterator first, const_iterator last); // (4) C++11 +constexpr iterator erase(const_iterator first, const_iterator last); // (4) C++26 ``` ## 概要 @@ -201,3 +205,4 @@ int main() - [N2350 Container insert/erase and iterator constness (Revision 1)](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2350.pdf) - [LWG Issue 2059. C++0x ambiguity problem with `map::erase`](https://cplusplus.github.io/LWG/issue2059) - C++17で、`erase(iterator)`を追加 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/unordered_set/unordered_set/erase_if_free.md b/reference/unordered_set/unordered_set/erase_if_free.md index ea70475735..e7c247882d 100644 --- a/reference/unordered_set/unordered_set/erase_if_free.md +++ b/reference/unordered_set/unordered_set/erase_if_free.md @@ -8,7 +8,10 @@ namespace std { template typename unordered_set::size_type - erase_if(unordered_set& c, Predicate pred); + erase_if(unordered_set& c, Predicate pred); // (1) C++20 + template + constexpr typename unordered_set::size_type + erase_if(unordered_set& c, Predicate pred); // (1) C++26 } ``` @@ -78,3 +81,4 @@ int main() ## 参照 - [P1209R0 Adopt consistent container erasure from Library Fundamentals 2](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2018/p1209r0.html) - [R1115R3 Improving the Return Value of Erase-Like Algorithms II: Free `erase`/`erase_if`](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2019/p1115r3.pdf) +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/unordered_set/unordered_set/extract.md b/reference/unordered_set/unordered_set/extract.md index 0bb7afefca..28b8e8066d 100644 --- a/reference/unordered_set/unordered_set/extract.md +++ b/reference/unordered_set/unordered_set/extract.md @@ -6,8 +6,11 @@ * cpp17[meta cpp] ```cpp -node_type extract(const_iterator position); (1) -node_type extract(const key_type& x); (2) +node_type extract(const_iterator position); // (1) C++17 +constexpr node_type extract(const_iterator position); // (1) C++26 + +node_type extract(const key_type& x); // (2) C++17 +constexpr node_type extract(const key_type& x); // (2) C++26 ``` ## 概要 @@ -136,3 +139,4 @@ s2 = { 3, 2 } ## 参照 - [Splicing Maps and Sets(Revision 5)](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/p0083r3.pdf) +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/unordered_set/unordered_set/find.md b/reference/unordered_set/unordered_set/find.md index 77923eee23..b776a8ff66 100644 --- a/reference/unordered_set/unordered_set/find.md +++ b/reference/unordered_set/unordered_set/find.md @@ -6,11 +6,17 @@ * cpp11[meta cpp] ```cpp -iterator find(const key_type& x); // (1) C++11 -const_iterator find(const key_type& x) const; // (2) C++11 +iterator find(const key_type& x); // (1) C++11 +constexpr iterator find(const key_type& x); // (1) C++26 -template iterator find(const K& k); // (3) C++20 -template const_iterator find(const K& k) const; // (4) C++20 +const_iterator find(const key_type& x) const; // (2) C++11 +constexpr const_iterator find(const key_type& x) const; // (2) C++26 + +template iterator find(const K& k); // (3) C++20 +template constexpr iterator find(const K& k); // (3) C++26 + +template const_iterator find(const K& k) const; // (4) C++20 +template constexpr const_iterator find(const K& k) const; // (4) C++26 ``` ## 概要 @@ -101,3 +107,4 @@ not found ## 参照 - [P0919R3 Heterogeneous lookup for unordered containers](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2018/p0919r3.html) +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/unordered_set/unordered_set/get_allocator.md b/reference/unordered_set/unordered_set/get_allocator.md index c770af92d7..a854c3da27 100644 --- a/reference/unordered_set/unordered_set/get_allocator.md +++ b/reference/unordered_set/unordered_set/get_allocator.md @@ -6,7 +6,8 @@ * cpp11[meta cpp] ```cpp -allocator_type get_allocator() const noexcept; +allocator_type get_allocator() const noexcept; // (1) C++11 +constexpr allocator_type get_allocator() const noexcept; // (1) C++26 ``` ## 概要 @@ -116,3 +117,7 @@ libstdc++ の `unordered_set` では、アロケータの `select_on_container_c | [`swap`](swap_free.md) | 内容の交換(非メンバ関数) | | [`allocator`](/reference/memory/allocator.md) | デフォルトのアロケータ | | [`allocator_traits`](/reference/memory/allocator_traits.md) | アロケータのトレイツ | + + +## 参照 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/unordered_set/unordered_set/hash_function.md b/reference/unordered_set/unordered_set/hash_function.md index d3082b57d4..fca9ff922b 100644 --- a/reference/unordered_set/unordered_set/hash_function.md +++ b/reference/unordered_set/unordered_set/hash_function.md @@ -6,7 +6,8 @@ * cpp11[meta cpp] ```cpp -hasher hash_function() const; +hasher hash_function() const; // (1) C++11 +constexpr hasher hash_function() const; // (1) C++26 ``` ## 概要 @@ -74,3 +75,7 @@ hash(2) = 2 |-----------------------------------------|------------------------------------------------------| | [`hash`](/reference/functional/hash.md) | デフォルトのハッシュ関数オブジェクト(class template) | | [`key_eq`](key_eq.md) | キー比較用関数オブジェクトの取得 | + + +## 参照 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/unordered_set/unordered_set/insert.md b/reference/unordered_set/unordered_set/insert.md index e59ee0e8aa..88320d3b9b 100644 --- a/reference/unordered_set/unordered_set/insert.md +++ b/reference/unordered_set/unordered_set/insert.md @@ -7,39 +7,67 @@ ```cpp pair - insert(const value_type& v); // (1) C++11 + insert(const value_type& v); // (1) C++11 +constexpr pair + insert(const value_type& v); // (1) C++26 + pair - insert(value_type&& rv); // (2) C++11 + insert(value_type&& rv); // (2) C++11 +constexpr pair + insert(value_type&& rv); // (2) C++26 template -pair - insert(K&& x); // (3) C++26 +constexpr pair + insert(K&& x); // (3) C++26 iterator insert(const_iterator position, - const value_type& v); // (4) C++11 + const value_type& v); // (4) C++11 +constexpr iterator + insert(const_iterator position, + const value_type& v); // (4) C++26 + iterator insert(const_iterator position, - value_type&& rv); // (5) C++11 + value_type&& rv); // (5) C++11 +constexpr iterator + insert(const_iterator position, + value_type&& rv); // (5) C++26 template iterator insert(const_iterator hint, - K&& x); // (6) C++11 + K&& x); // (6) C++11 +template +constexpr iterator + insert(const_iterator hint, + K&& x); // (6) C++26 template void insert(InputIterator first, - InputIterator last); // (7) C++11 + InputIterator last); // (7) C++11 +template +constexpr void + insert(InputIterator first, + InputIterator last); // (7) C++26 void insert(initializer_list il); // (8) C++11 +constexpr void + insert(initializer_list il); // (8) C++26 insert_return_type - insert(node_type&& nh); // (9) C++17 + insert(node_type&& nh); // (9) C++17 +constexpr insert_return_type + insert(node_type&& nh); // (9) C++26 + iterator insert(const_iterator hint, - node_type&& nh); // (10) C++17 + node_type&& nh); // (10) C++17 +constexpr iterator + insert(const_iterator hint, + node_type&& nh); // (10) C++26 ``` * initializer_list[link /reference/initializer_list/initializer_list.md] @@ -290,3 +318,4 @@ inline void unordered_set::insert(initializer_list`のバージョンが追加された +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/unordered_set/unordered_set/insert_range.md b/reference/unordered_set/unordered_set/insert_range.md index 133dbb95ef..d7778ca4c2 100644 --- a/reference/unordered_set/unordered_set/insert_range.md +++ b/reference/unordered_set/unordered_set/insert_range.md @@ -7,7 +7,9 @@ ```cpp template R> -void insert_range(R&& rg); // C++23 +void insert_range(R&& rg); // (1) C++23 +template R> +constexpr void insert_range(R&& rg); // (1) C++26 ``` ## 概要 @@ -70,3 +72,7 @@ int main () | 名前 | 説明 | |-------------------------------------------|----------------------| | [`insert`](insert.md) | 要素の追加 | + + +## 参照 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/unordered_set/unordered_set/key_eq.md b/reference/unordered_set/unordered_set/key_eq.md index d5c80cdced..cb78aba8b8 100644 --- a/reference/unordered_set/unordered_set/key_eq.md +++ b/reference/unordered_set/unordered_set/key_eq.md @@ -6,7 +6,8 @@ * cpp11[meta cpp] ```cpp -key_equal key_eq() const; +key_equal key_eq() const; // (1) C++11 +constexpr key_equal key_eq() const; // (1) C++26 ``` ## 概要 @@ -72,3 +73,7 @@ eq(1, 1) = true |----------------------------------------------------|----------------------------------------------| | [`equal_to`](/reference/functional/equal_to.md) | 等値比較演算関数オブジェクト(class template) | | [`hash_function`](hash_function.md) | ハッシュ関数オブジェクトの取得 | + + +## 参照 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/unordered_set/unordered_set/load_factor.md b/reference/unordered_set/unordered_set/load_factor.md index 46c6dc735e..9f19614f3b 100644 --- a/reference/unordered_set/unordered_set/load_factor.md +++ b/reference/unordered_set/unordered_set/load_factor.md @@ -6,7 +6,8 @@ * cpp11[meta cpp] ```cpp -float load_factor() const noexcept; +float load_factor() const noexcept; // (1) C++11 +constexpr float load_factor() const noexcept; // (1) C++26 ``` ## 概要 @@ -92,3 +93,7 @@ size is 10, bucket_count is 11, load_factor is 0.909091 | [`max_load_factor`](max_load_factor.md) | 負荷率の最大値を取得、設定 | | [`rehash`](rehash.md) | 最小バケット数指定によるバケット数の調整 | | [`reserve`](reserve.md) | 最小要素数指定によるバケット数の調整 | + + +## 参照 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/unordered_set/unordered_set/max_bucket_count.md b/reference/unordered_set/unordered_set/max_bucket_count.md index 759028262a..00b81b4317 100644 --- a/reference/unordered_set/unordered_set/max_bucket_count.md +++ b/reference/unordered_set/unordered_set/max_bucket_count.md @@ -6,7 +6,8 @@ * cpp11[meta cpp] ```cpp -size_type max_bucket_count() const noexcept; +size_type max_bucket_count() const noexcept; // (1) C++11 +constexpr size_type max_bucket_count() const noexcept; // (1) C++26 ``` ## 概要 @@ -65,3 +66,7 @@ max bucket count is 2305843009213693951 | [`end(size_type)`](end-size_type.md) | インデックス(添え字)で指定したバケット内の最終要素の次を指すイテレータを取得 | | [`cbegin(size_type)`](cbegin-size_type.md) | インデックス(添え字)で指定したバケット内の先頭要素を指す読み取り専用イテレータを取得 | | [`cend(size_type)`](cend-size_type.md) | インデックス(添え字)で指定したバケット内の最終要素の次を指す読み取り専用イテレータを取得 | + + +## 参照 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/unordered_set/unordered_set/max_load_factor.md b/reference/unordered_set/unordered_set/max_load_factor.md index 9bdd9508bb..c393ac68d3 100644 --- a/reference/unordered_set/unordered_set/max_load_factor.md +++ b/reference/unordered_set/unordered_set/max_load_factor.md @@ -6,8 +6,11 @@ * cpp11[meta cpp] ```cpp -float max_load_factor() const noexcept; // (1) -void max_load_factor(float z); // (2) +float max_load_factor() const noexcept; // (1) C++11 +constexpr float max_load_factor() const noexcept; // (1) C++26 + +void max_load_factor(float z); // (2) C++11 +constexpr void max_load_factor(float z); // (2) C++26 ``` ## 概要 @@ -183,3 +186,7 @@ size is 27, bucket_count is 29, load_factor is 0.931035, bucket_count * max_load | [`load_factor`](load_factor.md) | 現在の負荷率(バケットあたりの要素数の平均)を取得 | | [`rehash`](rehash.md) | 最小バケット数指定によるバケット数の調整 | | [`reserve`](reserve.md) | 最小要素数指定によるバケット数の調整 | + + +## 参照 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/unordered_set/unordered_set/max_size.md b/reference/unordered_set/unordered_set/max_size.md index eca44e32ad..9c3caed047 100644 --- a/reference/unordered_set/unordered_set/max_size.md +++ b/reference/unordered_set/unordered_set/max_size.md @@ -6,7 +6,8 @@ * cpp11[meta cpp] ```cpp -size_type max_size() const noexcept; +size_type max_size() const noexcept; // (1) C++11 +constexpr size_type max_size() const noexcept; // (1) C++26 ``` ## 概要 @@ -67,3 +68,7 @@ C++11 ではアロケータにメンバ関数 `max_size` は必須ではない |-----------------------|----------------------------| | [`empty`](empty.md) | コンテナが空かどうかを判定 | | [`size`](size.md) | 要素数の取得 | + + +## 参照 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/unordered_set/unordered_set/merge.md b/reference/unordered_set/unordered_set/merge.md index dfe1913e0d..f0ae2ae30e 100644 --- a/reference/unordered_set/unordered_set/merge.md +++ b/reference/unordered_set/unordered_set/merge.md @@ -7,13 +7,24 @@ ```cpp template - void merge(unordered_set& source); // (1) +void merge(unordered_set& source); // (1) C++17 template - void merge(unordered_set&& source); // (2) +constexpr void merge(unordered_set& source); // (1) C++26 + +template +void merge(unordered_set&& source); // (2) C++17 +template +constexpr void merge(unordered_set&& source); // (2) C++26 + +template +void merge(unordered_multiset& source); // (3) C++17 +template +constexpr void merge(unordered_multiset& source); // (3) C++26 + template - void merge(unordered_multiset& source); // (3) +void merge(unordered_multiset&& source); // (4) C++17 template - void merge(unordered_multiset&& source); // (4) +constexpr void merge(unordered_multiset&& source); // (4) C++26 ``` ## 概要 @@ -86,3 +97,4 @@ s2 = { 20, 30, 10 } ## 参照 - [Splicing Maps and Sets(Revision 5)](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/p0083r3.pdf) +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/unordered_set/unordered_set/op_assign.md b/reference/unordered_set/unordered_set/op_assign.md index 64d8ce2ba6..a75d492d3c 100644 --- a/reference/unordered_set/unordered_set/op_assign.md +++ b/reference/unordered_set/unordered_set/op_assign.md @@ -6,13 +6,21 @@ * cpp11[meta cpp] ```cpp -unordered_set& operator=(const unordered_set& v); // (1) -unordered_set& operator=(unordered_set&& rv); // (2) +unordered_set& operator=(const unordered_set& v); // (1) C++11 +constexpr unordered_set& operator=(const unordered_set& v); // (1) C++26 + +unordered_set& operator=(unordered_set&& rv); // (2) C++11 unordered_set& operator=(unordered_set&& x) noexcept(allocator_traits::is_always_equal::value && is_nothrow_move_assignable::value && is_nothrow_move_assignable::value); // (2) C++17 -unordered_set& operator=(initializer_list il); // (3) +constexpr unordered_set& operator=(unordered_set&& x) + noexcept(allocator_traits::is_always_equal::value + && is_nothrow_move_assignable::value + && is_nothrow_move_assignable::value); // (2) C++26 + +unordered_set& operator=(initializer_list il); // (3) C++11 +constexpr unordered_set& operator=(initializer_list il); // (3) C++26 ``` * initializer_list[link /reference/initializer_list/initializer_list.md] @@ -90,3 +98,4 @@ unordered_set& operator=(initializer_list il); // (3) - (3)の経緯となる提案文書 - [N4258 Cleaning-up noexcept in the Library, Rev 3](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n4258.pdf) - `noexcept` 追加の経緯となる提案文書 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/unordered_set/unordered_set/op_constructor.md b/reference/unordered_set/unordered_set/op_constructor.md index 4ee4fba7a3..56d75570d8 100644 --- a/reference/unordered_set/unordered_set/op_constructor.md +++ b/reference/unordered_set/unordered_set/op_constructor.md @@ -6,91 +6,174 @@ * cpp11[meta cpp] ```cpp -unordered_set(); // (1) C++14 - -explicit unordered_set(size_type n, - const hasher& hf = hasher(), - const key_equal& eql = key_equal(), - const allocator_type& a = allocator_type()); // (2) C++14 - - -explicit unordered_set(size_type n = 実装依存の既定値, - const hasher& hf = hasher(), - const key_equal& eql = key_equal(), - const allocator_type& a = allocator_type()); // (1) + (2) C++11 +unordered_set(); // (1) C++14 +constexpr unordered_set(); // (1) C++26 + +explicit + unordered_set(size_type n, + const hasher& hf = hasher(), + const key_equal& eql = key_equal(), + const allocator_type& a = allocator_type()); // (2) C++14 +constexpr explicit + unordered_set(size_type n, + const hasher& hf = hasher(), + const key_equal& eql = key_equal(), + const allocator_type& a = allocator_type()); // (2) C++26 + + +explicit + unordered_set(size_type n = 実装依存の既定値, + const hasher& hf = hasher(), + const key_equal& eql = key_equal(), + const allocator_type& a = allocator_type()); // (1) + (2) C++11 template -unordered_set(InputIterator first, InputIterator last, +unordered_set(InputIterator first, + InputIterator last, size_type n = 実装依存の既定値, const hasher& hf = hasher(), const key_equal& eql = key_equal(), - const allocator_type& a = allocator_type()); // (3) + const allocator_type& a = allocator_type()); // (3) C++11 +template +constexpr + unordered_set(InputIterator first, + InputIterator last, + size_type n = 実装依存の既定値, + const hasher& hf = hasher(), + const key_equal& eql = key_equal(), + const allocator_type& a = allocator_type()); // (3) C++26 -unordered_set(const unordered_set& v); // (4) +unordered_set(const unordered_set& v); // (4) C++11 +constexpr unordered_set(const unordered_set& v); // (4) C++26 -unordered_set(unordered_set&& rv); // (5) +unordered_set(unordered_set&& rv); // (5) C++11 +constexpr unordered_set(unordered_set&& rv); // (5) C++26 -explicit unordered_set(const allocator_type& a); // (6) +explicit unordered_set(const allocator_type& a); // (6) C++11 +constexpr explicit unordered_set(const allocator_type& a); // (6) C++26 -unordered_set(const unordered_set& v, const allocator_type& a); // (7) +unordered_set(const unordered_set& v, const allocator_type& a); // (7) C++11 unordered_set(const unordered_set& v, - const type_identity_t& a); // (7) C++23 + const type_identity_t& a); // (7) C++23 +constexpr + unordered_set(const unordered_set& v, + const type_identity_t& a); // (7) C++26 -unordered_set(unordered_set&& rv, const allocator_type& a); // (8) +unordered_set(unordered_set&& rv, const allocator_type& a); // (8) C++11 unordered_set(unordered_set&& rv, - const type_identity_t& a); // (8) C++23 + const type_identity_t& a); // (8) C++23 +constexpr + unordered_set(unordered_set&& rv, + const type_identity_t& a); // (8) C++26 unordered_set(initializer_list il, size_type n = 実装依存の既定値, const hasher& hf = hasher(), const key_equal& eql = key_equal(), - const allocator_type& a = allocator_type()); // (9) + const allocator_type& a = allocator_type()); // (9) C++11 +constexpr + unordered_set(initializer_list il, + size_type n = 実装依存の既定値, + const hasher& hf = hasher(), + const key_equal& eql = key_equal(), + const allocator_type& a = allocator_type()); // (9) C++26 -unordered_set(size_type n, const allocator_type& a); // (10) C++14 +unordered_set(size_type n, const allocator_type& a); // (10) C++14 +constexpr unordered_set(size_type n, const allocator_type& a); // (10) C++26 unordered_set(size_type n, const hasher& hf, - const allocator_type& a); // (11) C++14 + const allocator_type& a); // (11) C++14 +constexpr + unordered_set(size_type n, + const hasher& hf, + const allocator_type& a); // (11) C++26 template unordered_set(InputIterator f, InputIterator l, size_type n, - const allocator_type& a); // (12) C++14 + const allocator_type& a); // (12) C++14 +template +constexpr + unordered_set(InputIterator f, + InputIterator l, + size_type n, + const allocator_type& a); // (12) C++26 template unordered_set(InputIterator f, InputIterator l, size_type n, const hasher& hf, - const allocator_type& a); // (13) C++14 + const allocator_type& a); // (13) C++14 +template +constexpr + unordered_set(InputIterator f, + InputIterator l, + size_type n, + const hasher& hf, + const allocator_type& a); // (13) C++26 unordered_set(initializer_list il, size_type n, - const allocator_type& a); // (14) C++14 + const allocator_type& a); // (14) C++14 +constexpr + unordered_set(initializer_list il, + size_type n, + const allocator_type& a); // (14) C++26 unordered_set(initializer_list il, size_type n, const hasher& hf, - const allocator_type& a); // (15) C++14 + const allocator_type& a); // (15) C++14 +constexpr + unordered_set(initializer_list il, + size_type n, + const hasher& hf, + const allocator_type& a); // (15) C++26 template R> -unordered_set(std::from_range_t, R&& rg, +unordered_set(std::from_range_t, + R&& rg, size_type n = 実装依存の既定値, const hasher& hf = hasher(), const key_equal& eql = key_equal(), - const allocator_type& a = allocator_type()); // (16) C++23 + const allocator_type& a = allocator_type()); // (16) C++23 +template R> +constexpr + unordered_set(std::from_range_t, + R&& rg, + size_type n = 実装依存の既定値, + const hasher& hf = hasher(), + const key_equal& eql = key_equal(), + const allocator_type& a = allocator_type()); // (16) C++26 template R> -unordered_set(std::from_range_t, R&& rg, +unordered_set(std::from_range_t, + R&& rg, size_type n, - const allocator_type& a); // (17) C++23 + const allocator_type& a); // (17) C++23 +template R> +constexpr + unordered_set(std::from_range_t, + R&& rg, + size_type n, + const allocator_type& a); // (17) C++26 template R> -unordered_set(std::from_range_t, R&& rg, +unordered_set(std::from_range_t, + R&& rg, size_type n, const hasher& hf, - const allocator_type& a); // (18) C++23 + const allocator_type& a); // (18) C++23 +template R> +constexpr + unordered_set(std::from_range_t, + R&& rg, + size_type n, + const hasher& hf, + const allocator_type& a); // (18) C++26 ``` * type_identity_t[link /reference/type_traits/type_identity.md] * initializer_list[link /reference/initializer_list/initializer_list.md] @@ -276,3 +359,4 @@ libstdc++ には 4.8.2 現在、(6), (7), (8)の形式はない。 なお、Discussion の例はアロケータの型が誤っているので注意 - [P1518R2 Stop Overconstraining Allocators in Container Deduction Guides](https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2021/p1518r2.html) - C++23でのアロケータ引数を`type_identity_t`で包む変更 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/unordered_set/unordered_set/op_destructor.md b/reference/unordered_set/unordered_set/op_destructor.md index 7fbe687cab..a3a412a34a 100644 --- a/reference/unordered_set/unordered_set/op_destructor.md +++ b/reference/unordered_set/unordered_set/op_destructor.md @@ -6,7 +6,8 @@ * cpp11[meta cpp] ```cpp -~unordered_set(); +~unordered_set(); // (1) C++11 +constexpr ~unordered_set(); // (1) C++26 ``` ## 概要 @@ -37,3 +38,7 @@ |----------------------------------------|----------------| | [`(constructor)`](op_constructor.md) | コンストラクタ | | [`operator=`](op_assign.md) | 代入演算子 | + + +## 参照 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/unordered_set/unordered_set/op_equal.md b/reference/unordered_set/unordered_set/op_equal.md index 882fa77087..dcdd00fc94 100644 --- a/reference/unordered_set/unordered_set/op_equal.md +++ b/reference/unordered_set/unordered_set/op_equal.md @@ -9,6 +9,9 @@ namespace std { template bool operator==(const unordered_set& a, const unordered_set& b); // (1) C++11 + template + constexpr bool operator==(const unordered_set& a, + const unordered_set& b); // (1) C++26 } ``` @@ -131,3 +134,4 @@ namespace std { - [P0809R0 Comparing Unordered Containers](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2018/p0809r0.pdf) - [P1614R2 The Mothership has Landed](https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2019/p1614r2.html) - C++20での三方比較演算子の追加と、関連する演算子の自動導出 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/unordered_set/unordered_set/op_not_equal.md b/reference/unordered_set/unordered_set/op_not_equal.md index 5c6fe89e99..8a460ae1ee 100644 --- a/reference/unordered_set/unordered_set/op_not_equal.md +++ b/reference/unordered_set/unordered_set/op_not_equal.md @@ -10,6 +10,9 @@ namespace std { template bool operator!=(const unordered_set& a, const unordered_set& b); // (1) C++11 + template + constexpr bool operator!=(const unordered_set& a, + const unordered_set& b); // (1) C++26 } ``` @@ -121,3 +124,4 @@ namespace std { - [P0809R0 Comparing Unordered Containers](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2018/p0809r0.pdf) - [P1614R2 The Mothership has Landed](https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2019/p1614r2.html) - C++20での三方比較演算子の追加と、関連する演算子の自動導出 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/unordered_set/unordered_set/rehash.md b/reference/unordered_set/unordered_set/rehash.md index e4fea065e5..b8b1f95fcb 100644 --- a/reference/unordered_set/unordered_set/rehash.md +++ b/reference/unordered_set/unordered_set/rehash.md @@ -6,7 +6,8 @@ * cpp11[meta cpp] ```cpp -void rehash(size_type n); +void rehash(size_type n); // (1) C++11 +constexpr void rehash(size_type n); // (1) C++26 ``` ## 概要 @@ -98,3 +99,7 @@ bucket_count is 7 | [`load_factor`](load_factor.md) | 現在の負荷率(バケットあたりの要素数の平均)を取得 | | [`max_load_factor`](max_load_factor.md) | 負荷率の最大値を取得、設定 | | [`reserve`](reserve.md) | 最小要素数指定によるバケット数の調整 | + + +## 参照 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/unordered_set/unordered_set/reserve.md b/reference/unordered_set/unordered_set/reserve.md index 0810b91b1b..d8e532128e 100644 --- a/reference/unordered_set/unordered_set/reserve.md +++ b/reference/unordered_set/unordered_set/reserve.md @@ -6,7 +6,8 @@ * cpp11[meta cpp] ```cpp -void reserve(size_type n); +void reserve(size_type n); // (1) C++11 +constexpr void reserve(size_type n); // (1) C++26 ``` ## 概要 @@ -104,3 +105,7 @@ bucket_count is 7 | [`insert`](insert.md) | 要素の追加 | | [`emplace`](emplace.md) | コンテナ内への要素の直接構築 | | [`emplace_hint`](emplace_hint.md) | 挿入位置のヒントを使用したコンテナ内への要素の直接構築 | + + +## 参照 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/unordered_set/unordered_set/size.md b/reference/unordered_set/unordered_set/size.md index 0a855b5f15..eaa9a38f61 100644 --- a/reference/unordered_set/unordered_set/size.md +++ b/reference/unordered_set/unordered_set/size.md @@ -6,7 +6,8 @@ * cpp11[meta cpp] ```cpp -size_type size() const noexcept; +size_type size() const noexcept; // (1) C++11 +constexpr size_type size() const noexcept; // (1) C++26 ``` ## 概要 @@ -70,3 +71,7 @@ int main() | [`begin`](begin.md) | 先頭要素を指すイテレータの取得 | | [`end`](end.md) | 最終要素の次を指すイテレータの取得 | | [`distance`](/reference/iterator/distance.md) | イテレータ間の距離を求める | + + +## 参照 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/unordered_set/unordered_set/swap.md b/reference/unordered_set/unordered_set/swap.md index 4c5e6d8a6f..76b8d82353 100644 --- a/reference/unordered_set/unordered_set/swap.md +++ b/reference/unordered_set/unordered_set/swap.md @@ -6,11 +6,15 @@ * cpp11[meta cpp] ```cpp -void swap(unordered_set& v); +void swap(unordered_set& v); // (1) C++11 void swap(unordered_set& x) noexcept(allocator_traits::is_always_equal::value && noexcept(swap(declval(),declval())) - && noexcept(swap(declval(),declval()))); // C++17 + && noexcept(swap(declval(),declval()))); // (1) C++17 +constexpr void swap(unordered_set& x) + noexcept(allocator_traits::is_always_equal::value + && noexcept(swap(declval(),declval())) + && noexcept(swap(declval(),declval()))); // (1) C++26 ``` ## 概要 @@ -116,3 +120,4 @@ us2 after : 9 7 5 3 1 ## 参照 - [N4258 Cleaning-up noexcept in the Library, Rev 3](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n4258.pdf) - `noexcept` 追加の経緯となる提案文書 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html) diff --git a/reference/unordered_set/unordered_set/swap_free.md b/reference/unordered_set/unordered_set/swap_free.md index a941439f52..2362334efd 100644 --- a/reference/unordered_set/unordered_set/swap_free.md +++ b/reference/unordered_set/unordered_set/swap_free.md @@ -8,12 +8,15 @@ namespace std { template void swap(unordered_set& x, - unordered_set& y); - + unordered_set& y); // (1) C++11 template void swap(unordered_set& x, unordered_set& y) - noexcept(noexcept(x.swap(y))); // C++17 + noexcept(noexcept(x.swap(y))); // (1) C++17 + template + constexpr void swap(unordered_set& x, + unordered_set& y) + noexcept(noexcept(x.swap(y))); // (1) C++26 } ``` @@ -106,3 +109,4 @@ namespace std { ## 参照 - [N4258 Cleaning-up noexcept in the Library, Rev 3](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n4258.pdf) - `noexcept` 追加の経緯となる提案文書 +- [P3372R3 constexpr containers and adaptors](https://open-std.org/jtc1/sc22/wg21/docs/papers/2025/p3372r3.html)