@@ -61,173 +61,175 @@ public:
6161 noexcept(
6262 is_nothrow_default_constructible<allocator_type>::value &&
6363 is_nothrow_default_constructible<key_compare>::value &&
64- is_nothrow_copy_constructible<key_compare>::value);
65- explicit map(const key_compare& comp);
66- map(const key_compare& comp, const allocator_type& a);
64+ is_nothrow_copy_constructible<key_compare>::value); // constexpr since C++26
65+ explicit map(const key_compare& comp); // constexpr since C++26
66+ map(const key_compare& comp, const allocator_type& a); // constexpr since C++26
6767 template <class InputIterator>
6868 map(InputIterator first, InputIterator last,
69- const key_compare& comp = key_compare());
69+ const key_compare& comp = key_compare()); // constexpr since C++26
7070 template <class InputIterator>
7171 map(InputIterator first, InputIterator last,
72- const key_compare& comp, const allocator_type& a);
72+ const key_compare& comp, const allocator_type& a); // constexpr since C++26
7373 template<container-compatible-range<value_type> R>
74- map(from_range_t, R&& rg, const Compare& comp = Compare(), const Allocator& = Allocator()); // C++23
75- map(const map& m);
74+ map(from_range_t, R&& rg, const Compare& comp = Compare(), const Allocator& = Allocator()); // C++23 // constexpr
75+ since C++26
76+
77+ map(const map& m); // constexpr since C++26
7678 map(map&& m)
7779 noexcept(
7880 is_nothrow_move_constructible<allocator_type>::value &&
79- is_nothrow_move_constructible<key_compare>::value);
80- explicit map(const allocator_type& a);
81- map(const map& m, const allocator_type& a);
82- map(map&& m, const allocator_type& a);
83- map(initializer_list<value_type> il, const key_compare& comp = key_compare());
84- map(initializer_list<value_type> il, const key_compare& comp, const allocator_type& a);
81+ is_nothrow_move_constructible<key_compare>::value); // constexpr since C++26
82+ explicit map(const allocator_type& a); // constexpr since C++26
83+ map(const map& m, const allocator_type& a); // constexpr since C++26
84+ map(map&& m, const allocator_type& a); // constexpr since C++26
85+ map(initializer_list<value_type> il, const key_compare& comp = key_compare()); // constexpr since C++26
86+ map(initializer_list<value_type> il, const key_compare& comp, const allocator_type& a); // constexpr since C++26
8587 template <class InputIterator>
8688 map(InputIterator first, InputIterator last, const allocator_type& a)
87- : map(first, last, Compare(), a) {} // C++14
89+ : map(first, last, Compare(), a) {} // C++14 // constexpr since C++26
8890 template<container-compatible-range<value_type> R>
8991 map(from_range_t, R&& rg, const Allocator& a))
90- : map(from_range, std::forward<R>(rg), Compare(), a) { } // C++23
92+ : map(from_range, std::forward<R>(rg), Compare(), a) { } // C++23 // constexpr since C++26
9193 map(initializer_list<value_type> il, const allocator_type& a)
92- : map(il, Compare(), a) {} // C++14
93- ~map();
94+ : map(il, Compare(), a) {} // C++14 // constexpr since C++26
95+ ~map(); // constexpr since C++26
9496
95- map& operator=(const map& m);
97+ map& operator=(const map& m); // constexpr since C++26
9698 map& operator=(map&& m)
9799 noexcept(
98100 allocator_type::propagate_on_container_move_assignment::value &&
99101 is_nothrow_move_assignable<allocator_type>::value &&
100- is_nothrow_move_assignable<key_compare>::value);
101- map& operator=(initializer_list<value_type> il);
102+ is_nothrow_move_assignable<key_compare>::value); // constexpr since C++26
103+ map& operator=(initializer_list<value_type> il); // constexpr since C++26
102104
103105 // iterators:
104- iterator begin() noexcept;
105- const_iterator begin() const noexcept;
106- iterator end() noexcept;
107- const_iterator end() const noexcept;
106+ iterator begin() noexcept; // constexpr since C++26
107+ const_iterator begin() const noexcept; // constexpr since C++26
108+ iterator end() noexcept; // constexpr since C++26
109+ const_iterator end() const noexcept; // constexpr since C++26
108110
109- reverse_iterator rbegin() noexcept;
110- const_reverse_iterator rbegin() const noexcept;
111- reverse_iterator rend() noexcept;
112- const_reverse_iterator rend() const noexcept;
111+ reverse_iterator rbegin() noexcept; // constexpr since C++26
112+ const_reverse_iterator rbegin() const noexcept; // constexpr since C++26
113+ reverse_iterator rend() noexcept; // constexpr since C++26
114+ const_reverse_iterator rend() const noexcept; // constexpr since C++26
113115
114- const_iterator cbegin() const noexcept;
115- const_iterator cend() const noexcept;
116- const_reverse_iterator crbegin() const noexcept;
117- const_reverse_iterator crend() const noexcept;
116+ const_iterator cbegin() const noexcept; // constexpr since C++26
117+ const_iterator cend() const noexcept; // constexpr since C++26
118+ const_reverse_iterator crbegin() const noexcept; // constexpr since C++26
119+ const_reverse_iterator crend() const noexcept; // constexpr since C++26
118120
119121 // capacity:
120- bool empty() const noexcept;
121- size_type size() const noexcept;
122- size_type max_size() const noexcept;
122+ bool empty() const noexcept; // constexpr since C++26
123+ size_type size() const noexcept; // constexpr since C++26
124+ size_type max_size() const noexcept; // constexpr since C++26
123125
124126 // element access:
125- mapped_type& operator[](const key_type& k);
126- mapped_type& operator[](key_type&& k);
127+ mapped_type& operator[](const key_type& k); // constexpr since C++26
128+ mapped_type& operator[](key_type&& k); // constexpr since C++26
127129
128- mapped_type& at(const key_type& k);
129- const mapped_type& at(const key_type& k) const;
130+ mapped_type& at(const key_type& k); // constexpr since C++26
131+ const mapped_type& at(const key_type& k) const; // constexpr since C++26
130132
131133 // modifiers:
132134 template <class... Args>
133- pair<iterator, bool> emplace(Args&&... args);
135+ pair<iterator, bool> emplace(Args&&... args); // constexpr since C++26
134136 template <class... Args>
135- iterator emplace_hint(const_iterator position, Args&&... args);
136- pair<iterator, bool> insert(const value_type& v);
137- pair<iterator, bool> insert( value_type&& v); // C++17
137+ iterator emplace_hint(const_iterator position, Args&&... args); // constexpr since C++26
138+ pair<iterator, bool> insert(const value_type& v); // constexpr since C++26
139+ pair<iterator, bool> insert( value_type&& v); // C++17 // constexpr since C++26
138140 template <class P>
139- pair<iterator, bool> insert(P&& p);
140- iterator insert(const_iterator position, const value_type& v);
141- iterator insert(const_iterator position, value_type&& v); // C++17
141+ pair<iterator, bool> insert(P&& p); // constexpr since C++26
142+ iterator insert(const_iterator position, const value_type& v); // constexpr since C++26
143+ iterator insert(const_iterator position, value_type&& v); // C++17 // constexpr since C++26
142144 template <class P>
143- iterator insert(const_iterator position, P&& p);
145+ iterator insert(const_iterator position, P&& p); // constexpr since C++26
144146 template <class InputIterator>
145- void insert(InputIterator first, InputIterator last);
147+ void insert(InputIterator first, InputIterator last); // constexpr since C++26
146148 template<container-compatible-range<value_type> R>
147- void insert_range(R&& rg); // C++23
148- void insert(initializer_list<value_type> il);
149+ void insert_range(R&& rg); // C++23 // constexpr since C++26
150+ void insert(initializer_list<value_type> il); // constexpr since C++26
149151
150- node_type extract(const_iterator position); // C++17
151- node_type extract(const key_type& x); // C++17
152- insert_return_type insert(node_type&& nh); // C++17
153- iterator insert(const_iterator hint, node_type&& nh); // C++17
152+ node_type extract(const_iterator position); // C++17 // constexpr since C++26
153+ node_type extract(const key_type& x); // C++17 // constexpr since C++26
154+ insert_return_type insert(node_type&& nh); // C++17 // constexpr since C++26
155+ iterator insert(const_iterator hint, node_type&& nh); // C++17 // constexpr since C++26
154156
155157 template <class... Args>
156- pair<iterator, bool> try_emplace(const key_type& k, Args&&... args); // C++17
158+ pair<iterator, bool> try_emplace(const key_type& k, Args&&... args); // C++17 // constexpr since C++26
157159 template <class... Args>
158- pair<iterator, bool> try_emplace(key_type&& k, Args&&... args); // C++17
160+ pair<iterator, bool> try_emplace(key_type&& k, Args&&... args); // C++17 // constexpr since C++26
159161 template <class... Args>
160- iterator try_emplace(const_iterator hint, const key_type& k, Args&&... args); // C++17
162+ iterator try_emplace(const_iterator hint, const key_type& k, Args&&... args); // C++17 // constexpr since C++26
161163 template <class... Args>
162- iterator try_emplace(const_iterator hint, key_type&& k, Args&&... args); // C++17
164+ iterator try_emplace(const_iterator hint, key_type&& k, Args&&... args); // C++17 // constexpr since C++26
163165 template <class M>
164- pair<iterator, bool> insert_or_assign(const key_type& k, M&& obj); // C++17
166+ pair<iterator, bool> insert_or_assign(const key_type& k, M&& obj); // C++17 // constexpr since C++26
165167 template <class M>
166- pair<iterator, bool> insert_or_assign(key_type&& k, M&& obj); // C++17
168+ pair<iterator, bool> insert_or_assign(key_type&& k, M&& obj); // C++17 // constexpr since C++26
167169 template <class M>
168- iterator insert_or_assign(const_iterator hint, const key_type& k, M&& obj); // C++17
170+ iterator insert_or_assign(const_iterator hint, const key_type& k, M&& obj); // C++17 // constexpr since C++26
169171 template <class M>
170- iterator insert_or_assign(const_iterator hint, key_type&& k, M&& obj); // C++17
172+ iterator insert_or_assign(const_iterator hint, key_type&& k, M&& obj); // C++17 // constexpr since C++26
171173
172- iterator erase(const_iterator position);
173- iterator erase(iterator position); // C++14
174- size_type erase(const key_type& k);
175- iterator erase(const_iterator first, const_iterator last);
176- void clear() noexcept;
174+ iterator erase(const_iterator position); // constexpr since C++26
175+ iterator erase(iterator position); // C++14 // constexpr since C++26
176+ size_type erase(const key_type& k); // constexpr since C++26
177+ iterator erase(const_iterator first, const_iterator last); // constexpr since C++26
178+ void clear() noexcept; // constexpr since C++26
177179
178180 template<class C2>
179- void merge(map<Key, T, C2, Allocator>& source); // C++17
181+ void merge(map<Key, T, C2, Allocator>& source); // C++17 // constexpr since C++26
180182 template<class C2>
181- void merge(map<Key, T, C2, Allocator>&& source); // C++17
183+ void merge(map<Key, T, C2, Allocator>&& source); // C++17 // constexpr since C++26
182184 template<class C2>
183- void merge(multimap<Key, T, C2, Allocator>& source); // C++17
185+ void merge(multimap<Key, T, C2, Allocator>& source); // C++17 // constexpr since C++26
184186 template<class C2>
185- void merge(multimap<Key, T, C2, Allocator>&& source); // C++17
187+ void merge(multimap<Key, T, C2, Allocator>&& source); // C++17 // constexpr since C++26
186188
187189 void swap(map& m)
188190 noexcept(allocator_traits<allocator_type>::is_always_equal::value &&
189- is_nothrow_swappable<key_compare>::value); // C++17
191+ is_nothrow_swappable<key_compare>::value); // C++17 // constexpr since C++26
190192
191193 // observers:
192- allocator_type get_allocator() const noexcept;
193- key_compare key_comp() const;
194- value_compare value_comp() const;
194+ allocator_type get_allocator() const noexcept; // constexpr since C++26
195+ key_compare key_comp() const; // constexpr since C++26
196+ value_compare value_comp() const; // constexpr since C++26
195197
196198 // map operations:
197- iterator find(const key_type& k);
198- const_iterator find(const key_type& k) const;
199+ iterator find(const key_type& k); // constexpr since C++26
200+ const_iterator find(const key_type& k) const; // constexpr since C++26
199201 template<typename K>
200- iterator find(const K& x); // C++14
202+ iterator find(const K& x); // C++14 // constexpr since C++26
201203 template<typename K>
202- const_iterator find(const K& x) const; // C++14
204+ const_iterator find(const K& x) const; // C++14 // constexpr since C++26
203205
204206 template<typename K>
205- size_type count(const K& x) const; // C++14
206- size_type count(const key_type& k) const;
207+ size_type count(const K& x) const; // C++14 // constexpr since C++26
208+ size_type count(const key_type& k) const; // constexpr since C++26
207209
208- bool contains(const key_type& x) const; // C++20
209- template<class K> bool contains(const K& x) const; // C++20
210+ bool contains(const key_type& x) const; // C++20 // constexpr since C++26
211+ template<class K> bool contains(const K& x) const; // C++20 // constexpr since C++26
210212
211- iterator lower_bound(const key_type& k);
212- const_iterator lower_bound(const key_type& k) const;
213+ iterator lower_bound(const key_type& k); // constexpr since C++26
214+ const_iterator lower_bound(const key_type& k) const; // constexpr since C++26
213215 template<typename K>
214- iterator lower_bound(const K& x); // C++14
216+ iterator lower_bound(const K& x); // C++14 // constexpr since C++26
215217 template<typename K>
216- const_iterator lower_bound(const K& x) const; // C++14
218+ const_iterator lower_bound(const K& x) const; // C++14 // constexpr since C++26
217219
218- iterator upper_bound(const key_type& k);
219- const_iterator upper_bound(const key_type& k) const;
220+ iterator upper_bound(const key_type& k); // constexpr since C++26
221+ const_iterator upper_bound(const key_type& k) const; // constexpr since C++26
220222 template<typename K>
221- iterator upper_bound(const K& x); // C++14
223+ iterator upper_bound(const K& x); // C++14 // constexpr since C++26
222224 template<typename K>
223- const_iterator upper_bound(const K& x) const; // C++14
225+ const_iterator upper_bound(const K& x) const; // C++14 // constexpr since C++26
224226
225- pair<iterator,iterator> equal_range(const key_type& k);
226- pair<const_iterator,const_iterator> equal_range(const key_type& k) const;
227+ pair<iterator,iterator> equal_range(const key_type& k); // constexpr since C++26
228+ pair<const_iterator,const_iterator> equal_range(const key_type& k) const; // constexpr since C++26
227229 template<typename K>
228- pair<iterator,iterator> equal_range(const K& x); // C++14
230+ pair<iterator,iterator> equal_range(const K& x); // C++14 // constexpr since C++26
229231 template<typename K>
230- pair<const_iterator,const_iterator> equal_range(const K& x) const; // C++14
232+ pair<const_iterator,const_iterator> equal_range(const K& x) const; // C++14 // constexpr since C++26
231233};
232234
233235template <class InputIterator,
@@ -261,7 +263,7 @@ map(initializer_list<pair<const Key, T>>, Allocator) -> map<Key, T, less<Key>, A
261263template <class Key, class T, class Compare, class Allocator>
262264bool
263265operator==(const map<Key, T, Compare, Allocator>& x,
264- const map<Key, T, Compare, Allocator>& y);
266+ const map<Key, T, Compare, Allocator>& y); // constexpr since C++26
265267
266268template <class Key, class T, class Compare, class Allocator>
267269bool
@@ -297,11 +299,11 @@ template<class Key, class T, class Compare, class Allocator>
297299template <class Key, class T, class Compare, class Allocator>
298300void
299301swap(map<Key, T, Compare, Allocator>& x, map<Key, T, Compare, Allocator>& y)
300- noexcept(noexcept(x.swap(y)));
302+ noexcept(noexcept(x.swap(y))); // constexpr since C++26
301303
302304template <class Key, class T, class Compare, class Allocator, class Predicate>
303305typename map<Key, T, Compare, Allocator>::size_type
304- erase_if(map<Key, T, Compare, Allocator>& c, Predicate pred); // C++20
306+ erase_if(map<Key, T, Compare, Allocator>& c, Predicate pred); // C++20 // constexpr since C++26
305307
306308
307309template <class Key, class T, class Compare = less<Key>,
0 commit comments