Skip to content

Commit c493c71

Browse files
Synopsis attach: // constexpr since C++26
1 parent bee52bf commit c493c71

File tree

2 files changed

+110
-108
lines changed

2 files changed

+110
-108
lines changed

libcxx/include/__node_handle

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -30,30 +30,30 @@ private:
3030
3131
public:
3232
// [container.node.cons], constructors, copy, and assignment
33-
constexpr node-handle() noexcept : ptr_(), alloc_() {}
34-
node-handle(node-handle&&) noexcept;
35-
node-handle& operator=(node-handle&&);
33+
constexpr node-handle() noexcept : ptr_(), alloc_() {} // constexpr since C++26
34+
node-handle(node-handle&&) noexcept; // constexpr since C++26
35+
node-handle& operator=(node-handle&&); // constexpr since C++26
3636
3737
// [container.node.dtor], destructor
38-
~node-handle();
38+
~node-handle(); // constexpr since C++26
3939
4040
// [container.node.observers], observers
4141
value_type& value() const; // not present for map containers
4242
key_type& key() const; // not present for set containers
43-
mapped_type& mapped() const; // not present for set containers
43+
mapped_type& mapped() const; // not present for set containers // constexpr since C++26
4444
45-
allocator_type get_allocator() const;
46-
explicit operator bool() const noexcept;
47-
[[nodiscard]] bool empty() const noexcept; // nodiscard since C++20
45+
allocator_type get_allocator() const; // constexpr since C++26
46+
explicit operator bool() const noexcept; // constexpr since C++26
47+
[[nodiscard]] bool empty() const noexcept; // nodiscard since C++20 // constexpr since C++26
4848
4949
// [container.node.modifiers], modifiers
5050
void swap(node-handle&)
5151
noexcept(ator_traits::propagate_on_container_swap::value ||
52-
ator_traits::is_always_equal::value);
52+
ator_traits::is_always_equal::value); // constexpr since C++26
5353
5454
friend void swap(node-handle& x, node-handle& y) noexcept(noexcept(x.swap(y))) {
5555
x.swap(y);
56-
}
56+
} // constexpr since C++26
5757
};
5858
5959
*/

libcxx/include/map

Lines changed: 100 additions & 98 deletions
Original file line numberDiff line numberDiff line change
@@ -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
233235
template <class InputIterator,
@@ -261,7 +263,7 @@ map(initializer_list<pair<const Key, T>>, Allocator) -> map<Key, T, less<Key>, A
261263
template <class Key, class T, class Compare, class Allocator>
262264
bool
263265
operator==(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
266268
template <class Key, class T, class Compare, class Allocator>
267269
bool
@@ -297,11 +299,11 @@ template<class Key, class T, class Compare, class Allocator>
297299
template <class Key, class T, class Compare, class Allocator>
298300
void
299301
swap(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
302304
template <class Key, class T, class Compare, class Allocator, class Predicate>
303305
typename 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
307309
template <class Key, class T, class Compare = less<Key>,

0 commit comments

Comments
 (0)