libstdc++: Add comparison operators to std::shared_ptr (PR 94562)
[gcc.git] / libstdc++-v3 / ChangeLog
1 2020-04-14 Jonathan Wakely <jwakely@redhat.com>
2
3 PR libstdc++/94562
4 * include/bits/shared_ptr.h (operator<=>): Define for C++20.
5 * include/bits/shared_ptr_base.h (operator<=>): Likewise.
6 * include/bits/unique_ptr.h (operator<=>): Add inline specifier.
7 * testsuite/20_util/shared_ptr/comparison/cmp_c++20.cc: New test.
8 * testsuite/20_util/shared_ptr/comparison/less.cc: Do not expect
9 std::less<A*> to be used when comparing std::shared_ptr<A> objects in
10 C++20.
11
12 PR libstdc++/94565
13 * libsupc++/compare (__unspec): Add noexcept-specifier to constructor.
14 * testsuite/18_support/comparisons/categories/94565.cc: New test.
15
16 2020-04-13 Iain Sandoe <iain@sandoe.co.uk>
17
18 * include/std/coroutine: Update coroutines builtin define,
19 per n4861.
20
21 2020-04-09 Jonathan Wakely <jwakely@redhat.com>
22
23 * libsupc++/compare (compare_three_way): Fix noexcept-specifier.
24 (strong_order, weak_order, partial_order): Replace uses of <=> with
25 compare_three_way function object (LWG 3324).
26 * testsuite/18_support/comparisons/algorithms/partial_order.cc: Add
27 equality operator so that X satisfies three_way_comparable.
28 * testsuite/18_support/comparisons/algorithms/strong_order.cc:
29 Likewise.
30 * testsuite/18_support/comparisons/algorithms/weak_order.cc: Likewise.
31
32 * include/bits/unique_ptr.h (operator<=>): Define for C++20.
33 * testsuite/20_util/default_delete/48631_neg.cc: Adjust dg-error line.
34 * testsuite/20_util/default_delete/void_neg.cc: Likewise.
35 * testsuite/20_util/unique_ptr/comparison/compare.cc: New test.
36 * testsuite/20_util/unique_ptr/comparison/compare_c++20.cc: New test.
37
38 2020-04-08 Jonathan Wakely <jwakely@redhat.com>
39
40 * include/bits/slice_array.h (operator==(const slice&, const slice&)):
41 Define for C++20.
42 * include/std/complex (operator==(const T&, const complex<T>&))
43 (operator!=(const complex<T>&, const complex<T>&))
44 (operator!=(const complex<T>&, const T&))
45 (operator!=(const T&, const complex<T>&)): Do not declare for C++20.
46 * testsuite/26_numerics/slice/compare.cc: New test.
47
48 * include/std/charconv (to_chars_result, from_chars_result): Add
49 defaulted equality comparisons for C++20.
50 * testsuite/20_util/from_chars/compare.cc: New test.
51 * testsuite/20_util/to_chars/compare.cc: New test.
52
53 2020-04-07 Jonathan Wakely <jwakely@redhat.com>
54
55 PR libstdc++/94520
56 * include/std/charconv (__integer_to_chars_result_type)
57 (__integer_from_chars_result_type): Use __or_ instead of __or_v_ to
58 allow use in C++14.
59 * testsuite/20_util/from_chars/1.cc: Run test as C++14 and replace
60 use of std::string_view with std::string.
61 * testsuite/20_util/from_chars/2.cc: Likewise.
62 * testsuite/20_util/to_chars/1.cc: Likewise.
63 * testsuite/20_util/to_chars/2.cc: Likewise.
64
65 2020-04-06 Jonathan Wakely <jwakely@redhat.com>
66
67 PR libstdc++/94498
68 * include/bits/char_traits.h (__gnu_cxx::char_traits::move): Make it
69 usable in constant expressions for C++20.
70 (__gnu_cxx::char_traits::copy, __gnu_cxx::char_traits::assign): Add
71 _GLIBCXX20_CONSTEXPR.
72 (std::char_traits<char>, std::char_traits<wchar_t>)
73 (std::char_traits<char8_t>): Make move, copy and assign usable in
74 constant expressions for C++20.
75 (std::char_traits<char16_t>, std::char_traits<char32_t>): Make move
76 and copy usable in constant expressions for C++20.
77 * include/std/string_view (basic_string_view::copy): Add
78 _GLIBCXX20_CONSTEXPR.
79 * testsuite/21_strings/basic_string_view/operations/copy/char/
80 constexpr.cc: New test.
81 * testsuite/21_strings/basic_string_view/operations/copy/wchar_t/
82 constexpr.cc: New test.
83
84 2020-04-05 Gerald Pfeifer <gerald@pfeifer.com>
85
86 * doc/xml/manual/appendix_contributing.xml: Refer to Git
87 documentation instead of Subversion. Switch to https.
88 * doc/html/manual/appendix_contributing.html: Regenerate.
89
90 2020-04-03 Jonathan Wakely <jwakely@redhat.com>
91
92 PR libstdc++/93960
93 * include/bits/ptr_traits.h (__to_address): Add special case for debug
94 iterators, to avoid dereferenceable check.
95 * testsuite/20_util/to_address/1_neg.cc: Adjust dg-error line number.
96 * testsuite/20_util/to_address/debug.cc: New test.
97
98 2020-04-01 Andrea Corallo <andrea.corallo@arm.com>
99
100 * testsuite/experimental/net/execution_context/use_service.cc:
101 Require pthread and gthreads.
102
103 2020-04-01 Gerald Pfeifer <gerald@pfeifer.com>
104
105 * doc/xml/manual/appendix_free.xml: Move "free books" list from
106 fsf.org to gnu.org.
107 * doc/html/manual/appendix_free.html: Regenerate.
108
109 2020-03-31 Ville Voutilainen <ville.voutilainen@gmail.com>
110
111 Library-side tests for parenthesized aggregate init
112
113 PR c++/92878
114 PR c++/92947
115
116 * testsuite/20_util/allocator_traits/members/92878_92947.cc: New.
117 * testsuite/20_util/any/assign/92878_92947.cc: Likewise.
118 * testsuite/20_util/any/cons/92878_92947.cc: Likewise.
119 * testsuite/20_util/is_constructible/92878_92947.cc: Likewise.
120 * testsuite/20_util/optional/assignment/92878_92947.cc: Likewise.
121 * testsuite/20_util/optional/cons/92878_92947.cc: Likewise.
122 * testsuite/20_util/pair/cons/92878_92947.cc: Likewise.
123 * testsuite/20_util/shared_ptr/creation/92878_92947.cc: Likewise.
124 * testsuite/20_util/specialized_algorithms/construct_at/92878_92947.cc:
125 Likewise.
126 * testsuite/20_util/unique_ptr/creation/92878_92947.cc: Likewise.
127 * testsuite/20_util/uses_allocator/92878_92947.cc: Likewise.
128 * testsuite/20_util/variant/92878_92947.cc: Likewise.
129 * testsuite/23_containers/deque/modifiers/emplace/92878_92947.cc:
130 Likewise.
131 * testsuite/23_containers/forward_list/modifiers/92878_92947.cc:
132 Likewise.
133 * testsuite/23_containers/list/modifiers/emplace/92878_92947.cc:
134 Likewise.
135 * testsuite/23_containers/map/modifiers/emplace/92878_92947.cc:
136 Likewise.
137 * testsuite/23_containers/multimap/modifiers/emplace/92878_92947.cc:
138 Likewise.
139 * testsuite/23_containers/multiset/modifiers/emplace/92878_92947.cc:
140 Likewise.
141 * testsuite/23_containers/priority_queue/92878_92947.cc: Likewise.
142 * testsuite/23_containers/queue/92878_92947.cc: Likewise.
143 * testsuite/23_containers/set/modifiers/emplace/92878_92947.cc:
144 Likewise.
145 * testsuite/23_containers/stack/92878_92947.cc: Likewise.
146 * testsuite/23_containers/unordered_map/modifiers/92878_92947.cc:
147 Likewise.
148 * testsuite/23_containers/unordered_multimap/modifiers/92878_92947.cc:
149 Likewise.
150 * testsuite/23_containers/unordered_multiset/modifiers/92878_92947.cc:
151 Likewise.
152 * testsuite/23_containers/unordered_set/modifiers/92878_92947.cc:
153 Likewise.
154 * testsuite/23_containers/vector/modifiers/emplace/92878_92947.cc:
155 Likewise.
156
157 2020-03-28 Jonathan Wakely <jwakely@redhat.com>
158
159 * testsuite/20_util/is_constructible/value-2.cc: Fix test to account
160 for changes due to parenthesized aggregate-initialization in C++20.
161 * testsuite/20_util/time_point/cons/81468.cc: Fix test to not clash
162 with std::chrono::sys_time in C++20.
163
164 * include/bits/stl_iterator.h (reverse_iterator): Use requires-clause
165 to constrain C++20 versions of comparison operators. Fix backwards
166 logic of relational operators.
167 (move_iterator): Use requires-clause to constrain comparison operators
168 in C++20. Do not declare non-standard same-type overloads for C++20.
169 * testsuite/24_iterators/move_iterator/rel_ops_c++20.cc: Check result
170 of comparisons and check using greedy_ops type.
171 * testsuite/24_iterators/reverse_iterator/rel_ops_c++20.cc: Likewise.
172 * testsuite/24_iterators/move_iterator/greedy_ops.cc: Remove redundant
173 main function from compile-only test.
174 * testsuite/24_iterators/reverse_iterator/greedy_ops.cc: Likewise.
175
176 2020-03-27 Jonathan Wakely <jwakely@redhat.com>
177
178 * include/bits/range_cmp.h (__cpp_lib_ranges): Define.
179 * include/bits/stl_iterator.h: Check value of __cpp_concepts so that
180 C++20 concepts are required.
181 * include/bits/stl_iterator_base_types.h: Likewise.
182 * include/std/concepts: Likewise.
183 * include/std/version: Likewise.
184 * testsuite/std/ranges/headers/ranges/synopsis.cc: Check feature test
185 macro.
186
187 * include/bits/stl_iterator.h (reverse_iterator::iterator_concept)
188 (reverse_iterator::iterator_category): Define for C++20.
189 (reverse_iterator): Define comparison operators correctly for C++20.
190 (__normal_iterator): Add constraints to comparison operators for C++20.
191 (move_iterator::operator++(int)) [__cpp_lib_concepts]: Define new
192 overload for input iterators.
193 (move_iterator): Add constraints to comparison operators for C++20.
194 Define operator<=> for C++20.
195 * testsuite/24_iterators/move_iterator/input_iterator.cc: New test.
196 * testsuite/24_iterators/move_iterator/move_only.cc: New test.
197 * testsuite/24_iterators/move_iterator/rel_ops_c++20.cc: New test.
198 * testsuite/24_iterators/reverse_iterator/rel_ops_c++20.cc: New test.
199
200 * include/bits/iterator_concepts.h (__detail::__decay_copy)
201 (__detail::__member_begin, __detail::__adl_begin): Move here from
202 <bits/range_access.h>.
203 (__detail::__ranges_begin, __detail::__range_iter_t): Define.
204 * bits/range_access.h (__cust_access::__decay_copy)
205 (__cust_access::__member_begin, __cust_access::__adl_begin): Move to
206 <bits/iterator_concepts.h>.
207 (ranges::iterator_t): Use __detail::__range_iter_t.
208 * include/bits/stl_iterator.h (back_insert_iterator): Simplify
209 conditional compilation. Add _GLIBCXX20_CONSTEXPR to all members.
210 (front_insert_iterator): Likewise.
211 (insert_iterator): Implement changes from P0896R4 for C++20.
212 * testsuite/24_iterators/back_insert_iterator/constexpr.cc: New test.
213 * testsuite/24_iterators/front_insert_iterator/constexpr.cc: New test.
214 * testsuite/24_iterators/headers/iterator/synopsis_c++17.cc: Adjust
215 for inclusion in synopsis_c++20.cc which expects different signatures
216 for some function templates.
217 * testsuite/24_iterators/insert_iterator/constexpr.cc: New test.
218
219 * include/std/type_traits (__is_array_convertible): Move definition
220 to immediately after is_convertible.
221
222 2020-03-26 Jonathan Wakely <jwakely@redhat.com>
223
224 * include/std/chrono (chrono::days, chrono::weeks, chrono::years)
225 (chrono::months, chrono::sys_days, chrono::local_t)
226 (chrono::local_time, chrono::local_seconds, chrono::local_days):
227 Define for C++20.
228 (chrono::time_point): Add missing static assert.
229 * testsuite/20_util/time_point/requirements/duration_neg.cc: New test.
230 * testsuite/std/time/clock/file/overview.cc: New test.
231 * testsuite/std/time/clock/file/members.cc: New test.
232 * testsuite/std/time/syn_c++20.cc: New test.
233
234 2020-03-25 Mike Crowe <mac@mcrowe.com>
235
236 * testsuite/30_threads/shared_timed_mutex/try_lock_until/1.cc: New
237 test.
238 * testsuite/30_threads/shared_timed_mutex/try_lock_until/2.cc: New
239 test.
240
241 2020-03-25 Jonathan Wakely <jwakely@redhat.com>
242
243 * include/bits/fs_fwd.h (filesystem::__file_clock): Move to ...
244 * include/std/chrono (filesystem::__file_clock): Here.
245 (filesystem::__file_clock::from_sys, filesystem::__file_clock::to_sys):
246 Define public member functions for C++20.
247 (is_clock, is_clock_v): Define traits for C++20.
248 * include/std/condition_variable (condition_variable::wait_until): Add
249 check for valid clock.
250 * include/std/future (_State_baseV2::wait_until): Likewise.
251 * include/std/mutex (__timed_mutex_impl::_M_try_lock_until): Likewise.
252 * include/std/shared_mutex (shared_timed_mutex::try_lock_shared_until):
253 Likewise.
254 * include/std/thread (this_thread::sleep_until): Likewise.
255 * testsuite/30_threads/condition_variable/members/2.cc: Qualify
256 slow_clock with new namespace.
257 * testsuite/30_threads/condition_variable/members/clock_neg.cc: New
258 test.
259 * testsuite/30_threads/condition_variable_any/members/clock_neg.cc:
260 New test.
261 * testsuite/30_threads/future/members/clock_neg.cc: New test.
262 * testsuite/30_threads/recursive_timed_mutex/try_lock_until/3.cc:
263 Qualify slow_clock with new namespace.
264 * testsuite/30_threads/recursive_timed_mutex/try_lock_until/
265 clock_neg.cc: New test.
266 * testsuite/30_threads/shared_future/members/clock_neg.cc: New
267 test.
268 * testsuite/30_threads/shared_lock/locking/clock_neg.cc: New test.
269 * testsuite/30_threads/shared_timed_mutex/try_lock_until/clock_neg.cc:
270 New test.
271 * testsuite/30_threads/timed_mutex/try_lock_until/3.cc: Qualify
272 slow_clock with new namespace.
273 * testsuite/30_threads/timed_mutex/try_lock_until/4.cc: Likewise.
274 * testsuite/30_threads/timed_mutex/try_lock_until/clock_neg.cc: New
275 test.
276 * testsuite/30_threads/unique_lock/locking/clock_neg.cc: New test.
277 * testsuite/std/time/traits/is_clock.cc: New test.
278 * testsuite/util/slow_clock.h (slow_clock): Move to __gnu_test
279 namespace.
280
281 2020-03-21 Jonathan Wakely <jwakely@redhat.com>
282
283 PR libstdc++/93245
284 * include/experimental/bits/fs_path.h (path::generic_string<C,T,A>()):
285 * testsuite/experimental/filesystem/path/generic/generic_string.cc:
286 Improve test coverage.
287
288 PR libstdc++/94242
289 * include/bits/fs_path.h (path::_S_str_convert): Replace first
290 parameter with basic_string_view so that strings with different
291 allocators can be accepted.
292 (path::generic_string<C,T,A>()): Use basic_string object that uses the
293 right allocator type.
294 * testsuite/27_io/filesystem/path/generic/94242.cc: New test.
295 * testsuite/27_io/filesystem/path/generic/generic_string.cc: Improve
296 test coverage.
297
298 2020-03-18 Jonathan Wakely <jwakely@redhat.com>
299
300 PR libstdc++/94033
301 * include/std/type_traits (__is_nt_default_constructible_atom): Remove.
302 (__is_nt_default_constructible_impl): Remove.
303 (__is_nothrow_default_constructible_impl): Remove.
304 (__is_nt_constructible_impl): Add bool template parameter. Adjust
305 partial specializations.
306 (__is_nothrow_constructible_impl): Replace class template with alias
307 template.
308 (is_nothrow_default_constructible): Derive from alias template
309 __is_nothrow_constructible_impl instead of
310 __is_nothrow_default_constructible_impl.
311 * testsuite/20_util/is_nothrow_constructible/94003.cc: New test.
312
313 * include/std/stop_token (stop_token::_Stop_state_ref): Define
314 comparison operators explicitly if the compiler won't synthesize them.
315
316 * include/bits/stl_algobase.h (__lexicographical_compare_aux): Check
317 __cpp_lib_concepts before using iter_reference_t.
318 * include/bits/stream_iterator.h (istream_iterator): Check
319 __cpp_lib_concepts before using default_sentinel_t.
320 * include/bits/streambuf_iterator.h (istreambuf_iterator): Likewise.
321
322 PR libstdc++/94203
323 * include/experimental/executor (executor::executor(Executor)): Call
324 make_shared directly instead of _M_create. Create _Tgt1 object.
325 (executor::executor(allocator_arg_t, const ProtoAlloc&, Executor)):
326 Call allocate_shared directly instead of _M_create. Create _Tgt2
327 object.
328 (executor::target_type): Add cast needed for new _Tgt interface.
329 (executor::target): Define when RTTI is disabled. Use _Tgt::_M_func.
330 (executor::_Tgt): Define the same interface whether RTTI is enabled or
331 not.
332 (executor::_Tgt::target_type, executor::_Tgt::target): Do not use
333 std::type_info in the interface.
334 (executor::_Tgt::_M_func): Add data member.
335 (executor::_TgtImpl): Replace with _Tgt1 and _Tgt2 class templates.
336 (executor::_Tgt1::_S_func): Define function to access target without
337 depending on RTTI.
338 (executor::_M_create): Remove.
339 (operator==, operator!=): Simplify comparisons for executor.
340 * include/experimental/socket (is_error_code_enum<socket_errc>):
341 Define specialization before use.
342 * testsuite/experimental/net/executor/1.cc: New test.
343
344 2020-03-16 Jonathan Wakely <jwakely@redhat.com>
345
346 PR libstdc++/94199
347 * include/experimental/executor (service_already_exists): Add default
348 constructor. Declare make_service to be a friend.
349 * testsuite/experimental/net/execution_context/make_service.cc: New
350 test.
351
352 2020-03-12 Jonathan Wakely <jwakely@redhat.com>
353
354 * testsuite/tr1/8_c_compatibility/cstdlib/functions.cc: Do not pass
355 a null pointer to functions with nonnull(1) attribute.
356
357 2020-03-11 Patrick Palka <ppalka@redhat.com>
358
359 * include/std/ranges (split_view::_OuterIter::_OuterIter): Typo fix,
360 'address' -> 'std::__addressof'.
361 * testsuite/std/ranges/adaptors/split.cc: Test taking the split_view of
362 a non-forward input_range.
363 * testsuite/util/testsuite_iterators.h (output_iterator_wrapper): Make
364 default constructor protected instead of deleted, like with
365 input_iterator_wrapper.
366 (test_range::iterator): Add comment explaining that this type is used
367 only when the underlying wrapper is input_iterator_wrapper or
368 output_iterator_wrapper. Remove delegating defaulted constructor so
369 that the inherited default constructor is used instead.
370
371 LWG 3286 ranges::size is not required to be valid after a call to
372 ranges::begin on an input range
373 * include/std/ranges (subrange::subrange): Split single-argument
374 constructor into two, one constrained by _S_store_size and another by
375 !_S_store_size.
376 (take_view::begin): Call size() before calling ranges::begin(_M_base).
377 * testsuite/std/ranges/adaptors/lwg3286.cc: New test.
378 * testsuite/std/ranges/subrange/lwg3286.cc: New test.
379
380 2020-03-10 Jonathan Wakely <jwakely@redhat.com>
381
382 * include/std/ranges (split_view::_OuterIter::__at_end): Use __current
383 instead of _M_current.
384 (split_view::_OuterIter::operator++): Likewise.
385
386 * include/std/ranges (transform_view::_Iterator::__iter_move): Remove.
387 (transform_view::_Iterator::operator*): Add noexcept-specifier.
388 (transform_view::_Iterator::iter_move): Inline __iter_move body here.
389 (split_view::_OuterIter::__current): Add noexcept.
390 (split_view::_InnerIter::__iter_swap): Remove.
391 (split_view::_InnerIter::__iter_move): Remove.
392 (split_view::_InnerIter::_M_i_current): New accessors.
393 (split_view::_InnerIter::__at_end): Use _M_i_current().
394 (split_view::_InnerIter::operator*): Likewise.
395 (split_view::_InnerIter::operator++): Likewise.
396 (iter_move(const _InnerIter&)): Likewise.
397 (iter_swap(const _InnerIter&, const _InnerIter&)): Likewise.
398 * testsuite/std/ranges/adaptors/split.cc: Check noexcept-specifier
399 for iter_move and iter_swap on split_view's inner iterator.
400
401 PR c++/94117
402 * include/std/ranges (ranges::transform_view::_Iterator::iter_move):
403 Change expression in noexcept-specifier to match function body.
404
405 * testsuite/23_containers/unordered_set/allocator/ext_ptr.cc: Add
406 comment explaining multiple dg-do directives.
407 * testsuite/24_iterators/ostream_iterator/1.cc: Fix do-do directive
408 so test is run as well as compiled.
409
410 2020-03-09 Jonathan Wakely <jwakely@redhat.com>
411
412 PR libstdc++/94063
413 * src/c++17/fs_path.cc (path::operator+=(const path&)): Add kluge to
414 handle concatenations that change the type of the first component.
415 (path::operator+=(basic_string_view<value_type>)): Likewise.
416 * testsuite/27_io/filesystem/path/concat/94063.cc: New test.
417
418 2020-03-06 Patrick Palka <ppalka@redhat.com>
419
420 * include/std/ranges (join_view::_Sentinel<_Const>): Befriend
421 join_view::_Sentinel<!_Const>.
422 * testsuite/std/ranges/adaptors/join.cc: Augment test.
423
424 PR libstdc++/93978
425 * include/bits/range_access.h (__cust_access::_Empty::operator()):
426 Declare return type to be bool instead of auto.
427 * testsuite/std/ranges/adaptors/93978.cc: New test.
428
429 2020-03-06 Jonathan Wakely <jwakely@redhat.com>
430
431 PR libstdc++/94069
432 * include/std/shared_mutex [!PTHREAD_RWLOCK_INITIALIZER]
433 (__shared_mutex_pthread::__shared_mutex_pthread()): Remove incorrect
434 second argument to __glibcxx_rwlock_init.
435 * testsuite/30_threads/shared_timed_mutex/94069.cc: New test.
436
437 PR libstdc++/93244
438 * testsuite/27_io/filesystem/path/generic/generic_string.cc: Adjust
439 test to not fail due to PR 94063.
440 * testsuite/27_io/filesystem/path/generic/utf.cc: Likewise.
441 * testsuite/27_io/filesystem/path/generic/wchar_t.cc: Likewise.
442
443 2020-03-06 Andreas Krebbel <krebbel@linux.ibm.com>
444
445 * src/c++11/system_error.cc: Omit the ENOTSUP case statement if it
446 would match ENOSYS.
447
448 2020-03-05 Jonathan Wakely <jwakely@redhat.com>
449
450 * testsuite/27_io/filesystem/operations/all.cc: Mark unused variable.
451 * testsuite/27_io/filesystem/operations/copy.cc: Fix typo.
452 * testsuite/experimental/filesystem/operations/copy.cc: Likewise.
453 * testsuite/27_io/filesystem/operations/file_size.cc: Use correct type
454 for return value, and in comparison.
455 * testsuite/experimental/filesystem/operations/file_size.cc: Likewise.
456
457 PR libstdc++/94051
458 * include/std/string_view: Include <bits/ostream_insert.h>.
459 * testsuite/21_strings/basic_string_view/inserters/94051.cc: New test.
460
461 2020-03-04 Jonathan Wakely <jwakely@redhat.com>
462
463 * include/bits/cpp_type_traits.h (__memcpyable): Fix comment.
464
465 2020-03-04 Patrick Palka <ppalka@redhat.com>
466
467 PR libstdc++/94017
468 * include/bits/ranges_algobase.h (__fill_n_fn::operator()): Refine
469 condition for when to use memset, making sure to additionally check that
470 the output pointer's value type is a non-volatile byte type. Instead of
471 requiring that the fill type is a byte type, just require that it's an
472 integral type.
473 * testsuite/20_util/specialized_algorithms/uninitialized_fill/94017.cc:
474 New test.
475 * testsuite/20_util/specialized_algorithms/uninitialized_fill_n/94017.cc:
476 New test.
477 * testsuite/25_algorithms/fill/94013.cc: Uncomment part of test that was
478 blocked by PR 94017.
479 * testsuite/25_algorithms/fill/94017.cc: New test.
480 * testsuite/25_algorithms/fill_n/94017.cc: New test.
481
482 LWG 3355 The memory algorithms should support move-only input iterators
483 introduced by P1207
484 * include/bits/ranges_uninitialized.h
485 (__uninitialized_copy_fn::operator()): Use std::move to avoid attempting
486 to copy __ifirst, which could be a move-only input iterator. Use
487 operator- instead of ranges::distance to compute distance from a sized
488 sentinel.
489 (__uninitialized_copy_n_fn::operator()): Likewise.
490 (__uninitialized_move_fn::operator()): Likewise.
491 (__uninitialized_move_n_fn::operator()): Likewise.
492 (__uninitialized_destroy_fn::operator()): Use std::move to avoid
493 attempting to copy __first.
494 (__uninitialized_destroy_n_fn::operator()): Likewise.
495 * testsuite/20_util/specialized_algorithms/destroy/constrained.cc:
496 Augment test.
497 * .../specialized_algorithms/uninitialized_copy/constrained.cc:
498 Likewise.
499 * .../specialized_algorithms/uninitialized_move/constrained.cc:
500 Likewise.
501
502 * testsuite/util/testsuite_iterators.h (test_range::get_iterator): Make
503 protected instead of private.
504 (test_sized_range_sized_sent): New.
505
506 * testsuite/util/testsuite_iterators.h (input_iterator_wrapper_nocopy):
507 New testsuite iterator.
508 * testsuite/24_iterators/counted_iterator/lwg3389.cc: use it.
509 * testsuite/24_iterators/move_iterator/lwg3390.cc: Likewise.
510
511 * include/bits/ranges_uninitialized.h
512 (uninitialized_copy_fn::operator()): Pass a reference type as the first
513 argument to is_nothrow_assignable_v.
514 (uninitialized_copy_fn::operator()): Likewise.
515 (uninitialized_move_fn::operator()): Likewise. Return an in_out_result
516 with the input iterator stripped of its move_iterator.
517 (uninitialized_move_n_fn::operator()): Likewise.
518 (uninitialized_fill_fn::operator()): Pass a reference type as the first
519 argument to is_nothrow_assignable_v.
520 (uninitialized_fill_n_fn::operator()): Likewise.
521
522 2020-03-03 Jonathan Wakely <jwakely@redhat.com>
523
524 PR libstdc++/94013
525 * include/bits/cpp_type_traits.h (__memcpyable, __memcmpable): New
526 traits to control when to use memmove and memcmp optimizations.
527 (__is_nonvolatile_trivially_copyable): New helper trait.
528 * include/bits/ranges_algo.h (__lexicographical_compare_fn): Do not
529 use memcmp optimization with volatile data.
530 * include/bits/ranges_algobase.h (__equal_fn): Use __memcmpable.
531 (__copy_or_move, __copy_or_move_backward): Use __memcpyable.
532 * include/bits/stl_algobase.h (__copy_move_a2): Use __memcpyable.
533 (__copy_move_backward_a2): Likewise.
534 (__equal_aux1): Use __memcmpable.
535 (__lexicographical_compare_aux): Do not use memcmp optimization with
536 volatile data.
537 * testsuite/25_algorithms/copy/94013.cc: New test.
538 * testsuite/25_algorithms/copy_backward/94013.cc: New test.
539 * testsuite/25_algorithms/equal/94013.cc: New test.
540 * testsuite/25_algorithms/fill/94013.cc: New test.
541 * testsuite/25_algorithms/lexicographical_compare/94013.cc: New test.
542 * testsuite/25_algorithms/move/94013.cc: New test.
543 * testsuite/25_algorithms/move_backward/94013.cc: New test.
544
545 * include/bits/stl_algobase.h (lexicographical_compare_three_way):
546 Avoid redundant iterator comparisons (LWG 3410).
547
548 2020-03-02 Jonathan Wakely <jwakely@redhat.com>
549
550 PR libstdc++/93972
551 * include/bits/stl_algobase.h (__memcmp): Allow pointer types to
552 differ.
553 * testsuite/25_algorithms/lexicographical_compare/uchar.cc: New test.
554
555 * include/std/ranges (__detail::__maybe_empty_t): Rename to
556 __maybe_present_t.
557 (__adaptor::_RangeAdaptor, join_view, split_view): Use new name.
558
559 * include/bits/ranges_algo.h (shift_right): Add 'typename' to
560 dependent type.
561
562 2020-03-01 H.J. Lu <hongjiu.lu@intel.com>
563
564 * config/abi/post/x86_64-linux-gnu/x32/baseline_symbols.txt: Updated.
565
566 2020-02-29 John David Anglin <danglin@gcc.gnu.org>
567
568 * testsuite/17_intro/headers/c++1998/charset.cc: Skip on *-*-hpux*.
569 * testsuite/17_intro/headers/c++2011/charset.cc: Likewise.
570 * testsuite/17_intro/headers/c++2014/charset.cc: Likewise.
571 * testsuite/17_intro/headers/c++2017/charset.cc: Likewise.
572 * testsuite/17_intro/headers/c++2020/charset.cc: Likewise.
573
574 * testsuite/30_threads/condition_variable_any/stop_token/wait_on.cc:
575 Add libatomic option.
576 * testsuite/30_threads/jthread/jthread.cc: Likewise.
577
578 2020-02-29 François Dumont <fdumont@gcc.gnu.org>
579
580 * include/bits/stl_algo.h
581 (__find_if, __count_if, __is_permutation, std::is_permutation): Move...
582 * include/bits/stl_algobase.h: ...here.
583 * include/bits/hashtable_policy.h: Remove <bits/stl_algo.h> include.
584
585 2020-02-29 John David Anglin <danglin@gcc.gnu.org>
586
587 * testsuite/30_threads/stop_token/stop_callback.cc: Add libatomic
588 option.
589 * testsuite/30_threads/stop_token/stop_callback/deadlock-mt.cc:
590 Likewise.
591 * testsuite/30_threads/stop_token/stop_callback/deadlock.cc: Likewise.
592 * testsuite/30_threads/stop_token/stop_callback/destroy.cc: Likewise.
593 * testsuite/30_threads/stop_token/stop_callback/invoke.cc: Likewise.
594 * testsuite/30_threads/stop_token/stop_source.cc: Likewise.
595 * testsuite/30_threads/stop_token/stop_source/assign.cc: Likewise.
596 * testsuite/30_threads/stop_token/stop_token.cc: Likewise.
597 * testsuite/30_threads/stop_token/stop_token/stop_possible.cc:
598 Likewise.
599
600 PR libstdc++/92906
601 * config/abi/post/hppa-linux-gnu/baseline_symbols.txt: Update.
602
603 2020-02-28 Patrick Palka <ppalka@redhat.com>
604
605 PR libstdc++/93972
606 * include/bits/ranges_algo.h (__lexicographical_compare_fn::operator()):
607 Fix condition for when to use memcmp, making it consistent with the
608 corresponding condition used in std::lexicographical_compare.
609 * testsuite/25_algorithms/lexicographical_compare/93972.cc: New test.
610
611 * testsuite/26_numerics/headers/numeric/synopsis.cc: Add signatures for
612 functions introduced in C++11, C++17 and C++2a. Add 'constexpr' to
613 existing signatures for C++2a.
614
615 2020-02-28 Jonathan Wakely <jwakely@redhat.com>
616
617 * testsuite/24_iterators/range_operations/advance_debug_neg.cc: Run
618 test instead of just compiling it.
619
620 2020-02-28 Patrick Palka <ppalka@redhat.com>
621
622 * include/std/ranges (reverse_view::_S_needs_cached_begin): Set to false
623 whenever the underlying range models common_range.
624
625 * include/std/ranges (__detail::_CachedPosition): New struct.
626 (views::filter_view::_S_needs_cached_begin): New member variable.
627 (views::filter_view::_M_cached_begin): New member variable.
628 (views::filter_view::begin): Use _M_cached_begin to cache its
629 result.
630 (views::drop_view::_S_needs_cached_begin): New static member variable.
631 (views::drop_view::_M_cached_begin): New member variable.
632 (views::drop_view::begin): Use _M_cached_begin to cache its result
633 when _S_needs_cached_begin.
634 (views::drop_while_view::_M_cached_begin): New member variable.
635 (views::drop_while_view::begin): Use _M_cached_begin to cache its
636 result.
637 (views::reverse_view::_S_needs_cached_begin): New static member
638 variable.
639 (views::reverse_view::_M_cached_begin): New member variable.
640 (views::reverse_view::begin): Use _M_cached_begin to cache its result
641 when _S_needs_cached_begin.
642 * testsuite/std/ranges/adaptors/drop.cc: Augment test to check that
643 drop_view::begin caches its result.
644 * testsuite/std/ranges/adaptors/drop_while.cc: Augment test to check
645 that drop_while_view::begin caches its result.
646 * testsuite/std/ranges/adaptors/filter.cc: Augment test to check that
647 filter_view::begin caches its result.
648 * testsuite/std/ranges/adaptors/reverse.cc: Augment test to check that
649 reverse_view::begin caches its result.
650
651 2020-02-28 Jonathan Wakely <jwakely@redhat.com>
652
653 * testsuite/27_io/filesystem/operations/last_write_time.cc: Fixes for
654 filesystems that silently truncate timestamps.
655 * testsuite/experimental/filesystem/operations/last_write_time.cc:
656 Likewise.
657
658 * testsuite/21_strings/basic_string/cons/char/1.cc: Disable
659 -Wstringop-overflow warnings.
660
661 2020-02-27 Jonathan Wakely <jwakely@redhat.com>
662
663 * testsuite/lib/libstdc++.exp (v3_target_compile): Add
664 -fdiagnostics-urls=never to options.
665
666 2020-02-27 Patrick Palka <ppalka@redhat.com>
667
668 * include/std/ranges (transform_view::_Iterator<_Const>): Befriend
669 _Iterator<!_Const>.
670 (transform_view::_Sentinel<_Const>): Befriend _Sentinel<!_Const>.
671 (take_view::_Sentinel<_Const>): Likewise.
672 (take_while_view::_Sentinel<_Const>): Likewise.
673 (split_view::_OuterIter<_Const>): Befriend _OuterIter<!_Const>.
674 * testsuite/std/ranges/adaptors/split.cc: Augment test.
675 * testsuite/std/ranges/adaptors/take.cc: Augment test.
676 * testsuite/std/ranges/adaptors/take_while.cc: Augment test.
677 * testsuite/std/ranges/adaptors/transform.cc: Augment test.
678
679 * testsuite/25_algorithms/copy/constrained.cc: Don't assume that the
680 base() of a vector<>::iterator is a pointer.
681 * testsuite/25_algorithms/copy_backward/constrained.cc: Likewise.
682 * testsuite/25_algorithms/move/constrained.cc: Likewise.
683 * testsuite/25_algorithms/move_backward/constrained.cc: Likewise.
684 * testsuite/25_algorithms/inplace_merge/constrained.cc: Use foo.data()
685 instead of &foo[0].
686 * testsuite/25_algorithms/partial_sort/constrained.cc: Likewise.
687 * testsuite/25_algorithms/partial_sort_copy/constrained.cc: Likewise.
688 * testsuite/25_algorithms/shuffle/constrained.cc: Likewise.
689 * testsuite/25_algorithms/sort/constrained.cc: Likewise.
690 * testsuite/25_algorithms/stable_sort/constrained.cc: Likewise.
691
692 2020-02-27 Jonathan Wakely <jwakely@redhat.com>
693
694 * include/debug/array (operator<=>): Define for C++20.
695 * testsuite/23_containers/array/tuple_interface/get_debug_neg.cc:
696 Adjust dg-error line numbers.
697 * testsuite/23_containers/array/tuple_interface/
698 tuple_element_debug_neg.cc: Likewise.
699
700 * testsuite/23_containers/span/back_assert_neg.cc: Add #undef before
701 defining _GLIBCXX_ASSERTIONS.
702 * testsuite/23_containers/span/first_2_assert_neg.cc: Likewise.
703 * testsuite/23_containers/span/first_assert_neg.cc: Likewise.
704 * testsuite/23_containers/span/front_assert_neg.cc: Likewise.
705 * testsuite/23_containers/span/index_op_assert_neg.cc: Likewise.
706 * testsuite/23_containers/span/last_2_assert_neg.cc: Likewise.
707 * testsuite/23_containers/span/last_assert_neg.cc: Likewise.
708 * testsuite/23_containers/span/subspan_2_assert_neg.cc: Likewise.
709 * testsuite/23_containers/span/subspan_3_assert_neg.cc: Likewise.
710 * testsuite/23_containers/span/subspan_4_assert_neg.cc: Likewise.
711 * testsuite/23_containers/span/subspan_5_assert_neg.cc: Likewise.
712 * testsuite/23_containers/span/subspan_6_assert_neg.cc: Likewise.
713 * testsuite/23_containers/span/subspan_assert_neg.cc: Likewise.
714
715 * include/debug/string (__gnu_debug::basic_string::insert): Fix for
716 C++98 where the member function of the base class returns void.
717
718 * testsuite/util/testsuite_iterators.h (forward_iterator_wrapper): Add
719 equality comparisons that support value-initialized iterators.
720
721 * include/bits/boost_concept_check.h (__function_requires): Add
722 _GLIBCXX14_CONSTEXPR.
723 * testsuite/25_algorithms/min/concept_checks.cc: New test.
724
725 2020-02-26 Patrick Palka <ppalka@redhat.com>
726
727 PR libstdc++/93936
728 * include/std/ranges (split_view::_InnerIter::operator==): Compare
729 the operands' _M_i rather than their _M_i.current().
730 * testsuite/std/ranges/adaptors/split.cc: Augment test.
731
732 P1645R1 constexpr for <numeric> algorithms
733 * include/bits/stl_numeric.h (iota, accumulate, inner_product,
734 partial_sum, adjacent_difference): Make conditionally constexpr for
735 C++20.
736 * include/std/numeric (__cpp_lib_constexpr_numeric): Define this feature
737 test macro.
738 (reduce, transform_reduce, exclusive_scan, inclusive_scan,
739 transform_exclusive_scan, transform_inclusive_scan): Make conditionally
740 constexpr for C++20.
741 * include/std/version (__cpp_lib_constexpr_numeric): Define.
742 * testsuite/26_numerics/accumulate/constexpr.cc: New test.
743 * testsuite/26_numerics/adjacent_difference/constexpr.cc: Likewise.
744 * testsuite/26_numerics/exclusive_scan/constexpr.cc: Likewise.
745 * testsuite/26_numerics/inclusive_scan/constexpr.cc: Likewise.
746 * testsuite/26_numerics/inner_product/constexpr.cc: Likewise.
747 * testsuite/26_numerics/iota/constexpr.cc: Likewise.
748 * testsuite/26_numerics/partial_sum/constexpr.cc: Likewise.
749 * testsuite/26_numerics/reduce/constexpr.cc: Likewise.
750 * testsuite/26_numerics/transform_exclusive_scan/constexpr.cc: Likewise.
751 * testsuite/26_numerics/transform_inclusive_scan/constexpr.cc: Likewise.
752 * testsuite/26_numerics/transform_reduce/constexpr.cc: Likewise.
753
754 2020-02-26 Jonathan Wakely <jwakely@redhat.com>
755
756 * include/bits/ranges_algo.h (__lexicographical_compare_fn): Declare
757 variables in smaller scope and avoid calling ranges::distance when we
758 know they are pointers. Remove statically-unreachable use of
759 __builtin_unreachable().
760 * include/bits/stl_algobase.h (__lexicographical_compare::__lc):
761 Define inline.
762
763 * include/std/ranges (__detail::__maybe_empty_t): Define new helper
764 alias.
765 (__detail::__maybe_const_t): Likewise.
766 (__adaptor::_RangeAdaptor): Use __maybe_empty_t.
767 (transform_view, take_view, take_while_view, elements_view): Use
768 __maybe_const_t.
769 (join_view, split_view): Use both.
770
771 2020-02-25 Patrick Palka <ppalka@redhat.com>
772
773 LWG 3397 basic_istream_view::iterator should not provide
774 iterator_category
775 * include/std/ranges (basic_istream_view:_Iterator::iterator_category):
776 Rename to ...
777 (basic_istream_view:_Iterator::iterator_concept): ... this.
778 * testsuite/std/ranges/istream_view.cc: Augment test.
779
780 LWG 3325 Constrain return type of transformation function for
781 transform_view
782 * include/std/ranges (transform_view): Constrain the return type of the
783 transformation function as per LWG 3325.
784 * testsuite/std/ranges/adaptors/lwg3325_neg.cc: New test.
785
786 LWG 3313 join_view::_Iterator::operator-- is incorrectly constrained
787 * include/std/ranges (join_view::_Iterator::operator--): Require that
788 range_reference_t<_Base> models common_range.
789 * testsuite/std/ranges/adaptors/lwg3313_neg.cc: New test.
790
791 LWG 3301 transform_view::_Iterator has incorrect iterator_category
792 * include/std/ranges (transform_view::_Iterator::_S_iter_cat): Adjust
793 determination of iterator_category as per LWG 3301.
794 * testsuite/std/ranges/adaptors/transform.cc: Augment test.
795
796 LWG 3292 iota_view is under-constrained
797 * include/std/ranges (iota_view): Require that _Winc models semiregular
798 as per LWG 3292.
799 * testsuite/std/ranges/iota/lwg3292_neg.cc: New test.
800
801 2020-02-25 Jonathan Wakely <jwakely@redhat.com>
802
803 * include/bits/ranges_algobase.h (__copy_or_move): Do not use memmove
804 during constant evaluation. Call __builtin_memmove directly instead of
805 __memmove.
806 (__copy_or_move_backward): Likewise.
807 * include/bits/stl_algobase.h (__memmove): Remove.
808 (__copy_move<M, true, random_access_iterator_tag>::__copy_m)
809 (__copy_move_backward<M, true, random_access_iterator_tag>::__copy_m):
810 Use __builtin_memmove directly instead of __memmove.
811 (__copy_move_a2): Do not use memmove during constant evaluation.
812 (__copy_move_backward_a2): Use _IsMove constant to select correct
813 __copy_move_backward specialization.
814 * testsuite/25_algorithms/copy_backward/constexpr.cc: Check for copies
815 begin turned into moves during constant evaluation.
816
817 * testsuite/25_algorithms/move_backward/93872.cc: Add test left out of
818 previous commit.
819
820 PR libstdc++/93872
821 * include/bits/stl_algobase.h (__memmove): Cast away const before
822 doing move assignment.
823 * testsuite/25_algorithms/move/93872.cc: New test.
824 * testsuite/25_algorithms/move_backward/93872.cc: New test.
825
826 2020-02-24 Patrick Palka <ppalka@redhat.com>
827
828 PR libstdc++/93884
829 * include/bits/ranges_algobase.h (__copy_or_move,
830 __copy_or_move_backward): Don't inspect the iter_value_t of the output
831 iterator, instead inspect its iterator_traits directly.
832 * include/bits/stl_iterator.h (back_insert_iterator::container):
833 Conditionally initialize.
834 (back_insert_iterator::difference_type): Conditionally define.
835 (back_insert_iterator::back_insert_iterator): Conditionally define this
836 default constructor.
837 (front_insert_iterator::container): Conditionally initialize.
838 (front_insert_iterator::difference_type): Conditionally define.
839 (front_insert_iterator::front_insert_iterator): Conditionally define
840 this default constructor.
841 * 24_iterators/back_insert_iterator/pr93884.cc: New test.
842 * 24_iterators/front_insert_iterator/pr93884.cc: New test.
843
844 P0769R2 Add shift to <algorithm>
845 * include/bits/ranges_algo.h (shift_left, shift_right): New.
846 * testsuite/25_algorithms/shift_left/1.cc: New test.
847 * testsuite/25_algorithms/shift_right/1.cc: New test.
848
849 2020-02-24 Jonathan Wakely <jwakely@redhat.com>
850
851 * include/bits/stream_iterator.h (istream_iterator(default_sentinel_t)):
852 Make noexcept-specifier conditional.
853 * testsuite/24_iterators/istream_iterator/cons/sentinel.cc: Check
854 noexcept-specifier.
855
856 * include/bits/stream_iterator.h (istream_iterator(default_sentinel_t)):
857 Add constructor.
858 (operator==(istream_iterator, default_sentinel_t)): Add operator.
859 (ostream_iterator::difference_type): Define to ptrdiff_t for C++20.
860 * include/bits/streambuf_iterator.h
861 (istreambuf_iterator(default_sentinel_t)): Add constructor.
862 (operator==(istreambuf_iterator, default_sentinel_t)): Add operator.
863 * testsuite/24_iterators/istream_iterator/cons/sentinel.cc:
864 New test.
865 * testsuite/24_iterators/istream_iterator/sentinel.cc: New test.
866 * testsuite/24_iterators/istreambuf_iterator/cons/sentinel.cc:
867 New test.
868 * testsuite/24_iterators/istreambuf_iterator/sentinel.cc: New test.
869
870 * include/std/ranges (__deep_const_range, __enable_view_impl): Remove.
871 (ranges::enable_view): Simplify (LWG 3326).
872 * include/bits/range_access.h (ranges::enable_view): Declare.
873 * include/bits/regex.h (__enable_view_impl): Remove partial
874 specialization.
875 * include/bits/stl_multiset.h (__enable_view_impl): Likewise.
876 * include/bits/stl_set.h (__enable_view_impl): Likewise.
877 * include/bits/unordered_set.h (__enable_view_impl): Likewise.
878 * include/debug/multiset.h (__enable_view_impl): Likewise.
879 * include/debug/set.h (__enable_view_impl): Likewise.
880 * include/debug/unordered_set (__enable_view_impl): Likewise.
881 * include/experimental/string_view (ranges::enable_view): Define
882 partial specialization.
883 * include/std/span (ranges::enable_view): Likewise.
884 * include/std/string_view (ranges::enable_view): Likewise.
885 * testsuite/std/ranges/view.cc: Check satisfaction of updated concept.
886
887 2020-02-21 Jonathan Wakely <jwakely@redhat.com>
888
889 * include/std/optional (operator<=>(optional<T>, optional<U>))
890 (operator<=>(optional<T>, nullopt), operator<=>(optional<T>, U)):
891 Define for C++20.
892 * include/std/tuple (__tuple_cmp): New helper function for <=>.
893 (operator<=>(tuple<T...>, tuple<U>...)): Define for C++20.
894 * include/std/variant (operator<=>(variant<T...>, variant<T...>))
895 (operator<=>(monostate, monostate)): Define for C++20.
896 * testsuite/20_util/optional/relops/three_way.cc: New test.
897 * testsuite/20_util/tuple/comparison_operators/three_way.cc: New test.
898 * testsuite/20_util/variant/89851.cc: Move to ...
899 * testsuite/20_util/variant/relops/89851.cc: ... here.
900 * testsuite/20_util/variant/90008.cc: Move to ...
901 * testsuite/20_util/variant/relops/90008.cc: ... here.
902 * testsuite/20_util/variant/relops/three_way.cc: New test.
903
904 2020-02-20 Patrick Palka <ppalka@redhat.com>
905
906 * include/std/ranges (views::__adaptor::__maybe_refwrap): New utility
907 function.
908 (views::__adaptor::_RangeAdaptor::operator()): Add comments. Use
909 __maybe_refwrap to capture lvalue references by reference, and then use
910 unwrap_reference_t to forward the by-reference captures as references.
911 * testsuite/std/ranges/adaptors/split.cc: Augment test.
912 * testsuite/std/ranges/adaptors/split_neg.cc: New test.
913
914 * include/std/ranges (iota_view): Forward declare _Sentinel.
915 (iota_view::_Iterator): Befriend _Sentinel.
916 (iota_view::_Sentinel::_M_equal): New member function.
917 (iota_view::_Sentinel::operator==): Use it.
918 (views::_Iota::operator()): Forward __f using the correct type.
919 * testsuite/std/ranges/access/ssize.cc (test06): Don't call views::iota
920 with integers of different signedness, to appease iota_view's deduction
921 guide.
922 * testsuite/std/ranges/iota/iota_view.cc: Augment test.
923
924 2020-02-20 Jonathan Wakely <jwakely@redhat.com>
925
926 * include/bits/range_access.h (ranges::begin): Reject array of
927 incomplete type.
928 (ranges::end, ranges::size): Require arrays to be bounded.
929 (ranges::data): Require lvalue or borrowed_range.
930 (ranges::iterator_t): Remove constraint.
931 * testsuite/std/ranges/access/begin.cc: Do not check array of
932 incomplete type.
933 * testsuite/std/ranges/access/begin_neg.cc: New test.
934 * testsuite/std/ranges/access/end_neg.cc: Adjust expected error.
935 * testsuite/std/ranges/access/size_neg.cc: Adjust expected error.
936 * testsuite/std/ranges/access/ssize.cc: Do not check array of
937 incomplete type.
938
939 * include/std/system_error (error_category::operator<=>)
940 (operator<=>(const error_code&, const error_code&))
941 (operator<=>(const error_condition&, const error_condition&)): Define
942 for C++20.
943 * testsuite/19_diagnostics/error_category/operators/less.cc: New test.
944 * testsuite/19_diagnostics/error_category/operators/three_way.cc: New
945 test.
946 * testsuite/19_diagnostics/error_code/operators/equal.cc: Remove
947 incorrect comment.
948 * testsuite/19_diagnostics/error_code/operators/less.cc: New test.
949 * testsuite/19_diagnostics/error_code/operators/not_equal.cc: Remove
950 incorrect comment.
951 * testsuite/19_diagnostics/error_code/operators/three_way.cc: New test.
952 * testsuite/19_diagnostics/error_condition/operators/equal.cc: Remove
953 incorrect comment.
954 * testsuite/19_diagnostics/error_condition/operators/less.cc: New test.
955 * testsuite/19_diagnostics/error_condition/operators/not_equal.cc:
956 Remove incorrect comment.
957 * testsuite/19_diagnostics/error_condition/operators/three_way.cc: New
958 test.
959
960 * libsupc++/typeinfo (type_info::operator!=): Remove for C++20.
961
962 * include/std/thread (thread::id::operator<=>): Define for C++20.
963 * testsuite/30_threads/thread/id/70294.cc: Do not take addresses of
964 functions in namespace std.
965 * testsuite/30_threads/thread/id/operators_c++20.cc: New test.
966
967 2020-02-19 Patrick Palka <ppalka@redhat.com>
968
969 * testsuite/std/ranges/adaptors/split.cc (test03): Don't include the
970 null terminator of the underlying string as part of the test_range.
971 (main): Call test03.
972
973 2020-02-19 Jonathan Wakely <jwakely@redhat.com>
974
975 * include/bits/stl_iterator.h (common_iterator): Add copyable<I>
976 requirement (LWG 3385).
977 * testsuite/24_iterators/headers/iterator/synopsis_c++20.cc: Adjust
978 expected declaration.
979
980 * include/std/ranges (take_while_view, drop_view, drop_while_view)
981 (elements_view:_Iterator): Initialize data members (LWG 3364).
982
983 * libsupc++/compare (three_way_comparable): Remove always-false check
984 that should have been removed with weak_equality (P1959R0).
985 (three_way_comparable_with): Likewise. Reorder requirements (LWG 3360).
986
987 * include/std/concepts (__detail::__partially_ordered_with): Move here
988 from <compare>.
989 (totally_ordered, totally_ordered_with): Use __partially_ordered_with
990 to simplify definition (LWG 3331).
991 * libsupc++/compare (__detail::__partially_ordered_with): Move to
992 <concepts>.
993
994 * include/std/concepts (totally_ordered_with): Remove redundant
995 requirement (LWG 3329).
996
997 * include/std/ranges (__detail::__convertible_to_non_slicing): New
998 helper concept.
999 (__detail::__pair_like_convertible_to): Remove.
1000 (__detail::__pair_like_convertible_from): Add requirements for
1001 non-slicing conversions.
1002 (subrange): Constrain constructors with __convertible_to_non_slicing.
1003 Remove constructors from pair-like types. Add new deduction guide.
1004 * testsuite/std/ranges/subrange/lwg3282_neg.cc: New test.
1005
1006 * include/bits/iterator_concepts.h (iter_move): Add declaration to
1007 prevent unqualified lookup finding a suitable declaration (LWG 3247).
1008
1009 * include/std/memory_resource (polymorphic_allocator::allocate)
1010 (polymorphic_allocator::allocate_object): Change type of exception to
1011 bad_array_new_length (LWG 3237).
1012 * testsuite/20_util/polymorphic_allocator/lwg3237.cc: New test.
1013
1014 * include/std/type_traits (__cpp_lib_unwrap_ref): Define (LWG 3348).
1015 * include/std/version (__cpp_lib_unwrap_ref): Likewise.
1016 * testsuite/20_util/unwrap_reference/1.cc: Check macro.
1017 * testsuite/20_util/unwrap_reference/3.cc: New test.
1018
1019 * include/std/numeric (midpoint(T8, T*)): Do not check for complete
1020 type during overload resolution, use static assert instead (LWG 3200).
1021 * testsuite/26_numerics/midpoint/pointer.cc: Do not test with
1022 incomplete type.
1023 * testsuite/26_numerics/midpoint/pointer_neg.cc: New test.
1024
1025 * include/std/span (span(T (&)[N])): Use non-deduced context to
1026 prevent first parameter from interfering with class template argument
1027 deduction (LWG 3369).
1028 * testsuite/23_containers/span/deduction.cc: Add missing 'const'.
1029 * testsuite/23_containers/span/lwg3255.cc: Check for construction from
1030 rvalues.
1031
1032 * include/std/span (span::const_iterator, span::const_reverse_iterator)
1033 (span::cbegin(), span::cend(), span::crbegin(), span::crend()):
1034 Remove (LWG 3320).
1035 * testsuite/23_containers/span/everything.cc: Replace uses of cbegin
1036 and cend.
1037 * testsuite/20_util/specialized_algorithms/destroy/constrained.cc:
1038 Likewise.
1039 * testsuite/20_util/specialized_algorithms/uninitialized_copy/
1040 constrained.cc: Likewise.
1041 * testsuite/20_util/specialized_algorithms/
1042 uninitialized_default_construct/constrained.cc: Likewise.
1043 * testsuite/20_util/specialized_algorithms/uninitialized_fill/
1044 constrained.cc: Likewise.
1045 * testsuite/20_util/specialized_algorithms/uninitialized_move/
1046 constrained.cc: Likewise.
1047 * testsuite/20_util/specialized_algorithms/
1048 uninitialized_value_construct/constrained.cc: Likewise.
1049
1050 * include/bits/range_access.h (range_size_t): Define alias template.
1051 * include/std/ranges (all_view): Rename to views::all_t (LWG 3335).
1052 * testsuite/std/ranges/adaptors/filter.cc: Adjust to new name.
1053
1054 * include/std/ranges (filter_view, transform_view, take_view)
1055 (join_view, split_view, reverse_view): Remove commented-out converting
1056 constructors (LWG 3280).
1057
1058 * include/std/memory (uninitialized_construct_using_allocator): Use
1059 std::construct_at (LWG 3321).
1060
1061 * include/std/memory_resource (polymorphic_allocator::allocate_bytes)
1062 (polymorphic_allocator::allocate_object)
1063 (polymorphic_allocator::new_object): Add nodiscard attribute (LWG3304).
1064
1065 LWG 3379. "safe" in several library names is misleading
1066 * include/bits/range_access.h (enable_safe_range): Rename to
1067 enable_borrowed_range.
1068 (__detail::__maybe_safe_range): Rename to __maybe_borrowed_range.
1069 (safe_range): Rename to borrowed_range.
1070 * include/bits/ranges_algo.h: Adjust to use new names.
1071 * include/bits/ranges_algobase.h: Likewise.
1072 * include/bits/ranges_uninitialized.h: Likewise.
1073 * include/std/ranges: Likewise.
1074 (safe_iterator_t): Rename to borrowed_iterator_t.
1075 (safe_subrange_t): Rename to borrowed_subrange_t.
1076 * include/std/span: Adjust to use new names.
1077 * include/std/string_view: Likewise.
1078 * include/experimental/string_view: Likewise.
1079 * testsuite/std/ranges/access/begin.cc: Likewise.
1080 * testsuite/std/ranges/access/cbegin.cc: Likewise.
1081 * testsuite/std/ranges/access/cdata.cc: Likewise.
1082 * testsuite/std/ranges/access/cend.cc: Likewise.
1083 * testsuite/std/ranges/access/crbegin.cc: Likewise.
1084 * testsuite/std/ranges/access/crend.cc: Likewise.
1085 * testsuite/std/ranges/access/data.cc: Likewise.
1086 * testsuite/std/ranges/access/end.cc: Likewise.
1087 * testsuite/std/ranges/access/rbegin.cc: Likewise.
1088 * testsuite/std/ranges/access/rend.cc: Likewise.
1089 * testsuite/std/ranges/safe_range.cc: Likewise.
1090 * testsuite/std/ranges/safe_range_types.cc: Likewise.
1091 * testsuite/util/testsuite_iterators.h: Likewise.
1092
1093 * include/std/ranges (tuple_element<0, const subrange<I, S, K>>)
1094 (tuple_element<1, const subrange<I, S, K>>): Add partial
1095 specializations (LWG 3398).
1096 * testsuite/std/ranges/subrange/tuple_like.cc: New test.
1097
1098 * include/bits/ranges_algo.h (__find_fn, __find_first_of_fn)
1099 (__adjacent_find_fn, __remove_if_fn, __remove_copy_if_fn)
1100 (__unique_fn, __unique_copy_fn): Remove redundant conversions to bool.
1101
1102 2020-02-18 Patrick Palka <ppalka@redhat.com>
1103
1104 P1983R0 Wording for GB301, US296, US292, US291, and US283
1105 * include/std/ranges (filter_view::pred): New member function.
1106 (join_view::_Iterator::_Iterator): Remove now-redundant comment since
1107 P1983R0 fixes the highlighted issue in the same way.
1108 (join_view::_Iterator<_Const>): Add friend
1109 join_view::_Iterator<!_Const>.
1110 (join_view::_M_inner): Remove mutable specifier, effectively reverting
1111 the proposed wording changes of P3278.
1112 (join_view::begin): Refine the condition for when to return a const
1113 iterator.
1114 (split_view::_OuterIter::_OuterIter): Adjust constraints.
1115 * testsuite/std/ranges/adaptors/filter.cc: Test that filter_view::pred
1116 exists and works.
1117
1118 2020-02-18 Jonathan Wakely <jwakely@redhat.com>
1119
1120 PR libstdc++/93818
1121 * include/std/ranges (_RangeAdaptor): Add deduction guide.
1122 (filter_view::_Iterator): Add alias _Vp_iter and use in place of
1123 iterator_t<_Vp>.
1124 (filter_view::_Iterator::_S_iter_cat()): Add 'typename'.
1125 (transform_view::_Iterator): Add alias _Base_iter and use in place of
1126 iterator_t<_Base>.
1127 (transform_view::_Iterator::_S_iter_cat()): Add 'typename'.
1128 (join_view::_Iterator): Add _Outer_iter and _Inner_iter aliases.
1129 (join_view::_Iterator::_S_iter_cat()): Add 'typename'.
1130 (split_view::_InnerIter::_S_iter_cat()): Likewise.
1131
1132 * testsuite/20_util/integer_comparisons/equal.cc: Fix invalid
1133 assumption that long is wider than int.
1134 * testsuite/20_util/integer_comparisons/greater_equal.cc: Likewise.
1135 * testsuite/20_util/integer_comparisons/less.cc: Likewise.
1136 * testsuite/20_util/integer_comparisons/less_equal.cc: Likewise.
1137 * testsuite/20_util/integer_comparisons/not_equal.cc: Likewise.
1138
1139 P1976R2 Fixed-size span construction from dynamic range
1140 * include/std/span (__cpp_lib_span): Update value.
1141 (span(It, size_type), span(It, End)): Make conditionally explicit. Add
1142 assertion.
1143 (span(R&&), span(const span<OType, OExtent>&)): Likewise and relax
1144 constraints.
1145 (span::first<Count>(), span::last<Count>()): Use explicit type in
1146 return statement.
1147 (as_bytes, as_writable_bytes): Likewise.
1148 * include/std/version (__cpp_lib_span): Update value.
1149 * testsuite/23_containers/span/1.cc: Check new value.
1150 * testsuite/23_containers/span/2.cc: Check new value.
1151 * testsuite/23_containers/span/explicit.cc: New test.
1152
1153 * include/std/span (span::__is_compatible_array): Simplify alias
1154 template by using requires-clause.
1155 (span::__is_compatible_ref): New alias template for constraining
1156 constructors.
1157 (span::__is_compatible_iterator, span::__is_compatible_range): Remove.
1158 (span(It, size_type), span(It, End)): Use __is_compatible_ref.
1159 (span(T(&)[N], span(array<T, N>&), span(const array<T, N>&)): Remove
1160 redundant parentheses.
1161 (span(R&&)): Add missing constraints.
1162
1163 * include/std/span (span): Reorder members and rename template
1164 parameters to match declarations in the C++2a working paper.
1165
1166 P2116R0 Remove tuple-like protocol support from fixed-extent span
1167 * include/std/span (get, tuple_size, tuple_element): Remove.
1168 * testsuite/23_containers/span/everything.cc: Remove checks for
1169 tuple-like API.
1170 * testsuite/23_containers/span/get_neg.cc: Remove.
1171 * testsuite/23_containers/span/tuple_element_dynamic_neg.cc: Remove.
1172 * testsuite/23_containers/span/tuple_element_oob_neg.cc: Remove.
1173 * testsuite/23_containers/span/tuple_size_neg.cc: Remove.
1174
1175 2020-02-17 Patrick Palka <ppalka@redhat.com>
1176
1177 P2106R0 Alternative wording for GB315 and GB316
1178 * include/bits/ranges_algo.h (in_fun_result): New.
1179 (for_each_result, for_each_n_result): Change into an alias of
1180 in_fun_result.
1181 (in_in_result): New.
1182 (mismatch_result): Change into an alias of in_in_result.
1183 (copy_if_result): Change into an alias of in_out_result.
1184 (swap_ranges_result): Change into an alias of in_in_result.
1185 (unary_transform_result): Change into an alias of in_out_result.
1186 (in_in_out_result): New.
1187 (binary_transform_result): Change into an alias of in_in_out_result.
1188 (replace_copy_result, replace_copy_if_result, remove_copy_if_result,
1189 remove_copy_result, unique_copy_result, reverse_copy_result,
1190 rotate_copy_result, partial_sort_copy_result): Change into an alias of
1191 in_out_result.
1192 (in_out_out_result): New.
1193 (partition_copy_result, merge_result): Change into an alias of
1194 in_out_out_result.
1195 (set_union_result, set_intersection_result): Change into an alias of
1196 in_in_out_result.
1197 (set_difference_result): Change into an alias of in_out_result.
1198 (set_symmetric_difference): Change into an alias of in_in_out_result.
1199 (min_max_result): New.
1200 (minmax_result, minmax_element_result): Change into an alias of
1201 min_max_result.
1202 (in_found_result): New.
1203 (next_permutation_result, prev_permutation_result): Change into an alias
1204 of in_found_result.
1205 (__next_permutation_fn::operator(), __prev_permutation_fn::operator()):
1206 Adjust following changes to next_permutation_result and
1207 prev_permutation_result.
1208 * include/bits/ranges_algobase.h (in_out_result): New.
1209 (copy_result, move_result, move_backward_result, copy_backward_result,
1210 copy_n_result): Change into an alias of in_out_result.
1211 * include/bits/ranges_uninitialized.h (uninitialized_copy_result,
1212 uninitialized_copy_n_result, uninitialized_move_result,
1213 uninitialized_move_n_result): Likewise.
1214 * testsuite/25_algorithms/next_permutation/constrained.cc: Adjust uses of
1215 structured bindings.
1216 * testsuite/25_algorithms/prev_permutation/constrained.cc: Likewise.
1217
1218 P1243R4 Rangify new algorithms
1219 * include/bits/ranges_algo.h (for_each_n_result, __for_each_n_fn,
1220 for_each_n, __sample_fn, sample, __clamp_fn, clamp): New.
1221 * testsuite/25_algorithms/clamp/constrained.cc: New test.
1222 * testsuite/25_algorithms/for_each/constrained.cc: Augment test.
1223 * testsuite/25_algorithms/sample/constrained.cc: New test.
1224
1225 2020-02-17 Jonathan Wakely <jwakely@redhat.com>
1226
1227 P1964R2 Wording for boolean-testable
1228 * include/bits/ranges_algo.h (__find_fn, __find_first_of_fn)
1229 (__adjacent_find_fn): Cast result of predicate to bool.
1230 * include/std/concepts (__boolean): Remove.
1231 (__detail::__boolean_testable_impl, __detail::__boolean_testable): Add
1232 new helper concepts.
1233 (__detail::__weakly_eq_cmp_with, totally_ordered, totally_ordered_with)
1234 (predicate): Use __boolean_testable instead of boolean.
1235 * libsupc++/compare (__detail::__partially_ordered, _Synth3way):
1236 Likewise.
1237
1238 P1970R2 Consistency for size() functions: Add ranges::ssize
1239 * include/bits/range_access.h (_SSize, ssize): Define for C++20.
1240 * testsuite/std/ranges/access/ssize.cc: New test.
1241
1242 P1956R1 On the names of low-level bit manipulation functions
1243 * include/bits/hashtable_policy.h: Update comment.
1244 * include/std/bit (__ispow2, __ceil2, __floor2, __log2p1): Rename.
1245 (ispow2, ceil2, floor2, log2p1): Likewise.
1246 (__cpp_lib_int_pow2): Add feature test macro.
1247 * include/std/charconv (__to_chars_len_2): Adjust use of __log2p1.
1248 * include/std/memory (assume_aligned): Adjust use of ispow2.
1249 * include/std/version (__cpp_lib_int_pow2): Add.
1250 * libsupc++/new_opa.cc: Adjust use of __ispow2.
1251 * src/c++17/memory_resource.cc: Likewise, and for __ceil2 and __log2p1.
1252 * testsuite/17_intro/freestanding.cc: Adjust use of ispow2.
1253 * testsuite/26_numerics/bit/bit.pow.two/ceil2.cc: Rename to ...
1254 * testsuite/26_numerics/bit/bit.pow.two/bit_ceil.cc: ... here.
1255 * testsuite/26_numerics/bit/bit.pow.two/ceil2_neg.cc: Rename to ...
1256 * testsuite/26_numerics/bit/bit.pow.two/bit_ceil_neg.cc: ... here.
1257 * testsuite/26_numerics/bit/bit.pow.two/floor2.cc: Rename to ...
1258 * testsuite/26_numerics/bit/bit.pow.two/bit_floor.cc: ... here.
1259 * testsuite/26_numerics/bit/bit.pow.two/log2p1.cc: Rename to ...
1260 * testsuite/26_numerics/bit/bit.pow.two/bit_width.cc: ... here.
1261 * testsuite/26_numerics/bit/bit.pow.two/ispow2.cc: Rename to ...
1262 * testsuite/26_numerics/bit/bit.pow.two/has_single_bit.cc: ... here.
1263
1264 * include/std/charconv: Add comment.
1265
1266 PR libstdc++/92546 (partial)
1267 * include/bits/random.h (uniform_random_bit_generator): Move definition
1268 to <bits/uniform_int_dist.h>.
1269 * include/bits/ranges_algo.h: Include <bits/uniform_int_dist.h> instead
1270 of <bits/random.h>.
1271 * include/bits/ranges_algobase.h: Do not include <cmath>.
1272 * include/bits/uniform_int_dist.h (uniform_random_bit_generator):
1273 Move here.
1274 * include/std/ranges: Do not include <limits>.
1275 * testsuite/26_numerics/random/pr60037-neg.cc: Adjust dg-error lineno.
1276
1277 PR libstdc++/92546 (partial)
1278 * include/Makefile.am: Add new header.
1279 * include/Makefile.in: Regenerate.
1280 * include/bits/int_limits.h: New header.
1281 * include/bits/parse_numbers.h (__select_int::_Select_int): Replace
1282 numeric_limits with __detail::__int_limits.
1283 * include/std/bit (__rotl, __rotr, __countl_zero, __countl_one)
1284 (__countr_zero, __countr_one, __popcount, __ceil2, __floor2, __log2p1):
1285 Likewise.
1286 * include/std/charconv (__to_chars_8, __from_chars_binary)
1287 (__from_chars_alpha_to_num, from_chars): Likewise.
1288 * include/std/memory_resource (polymorphic_allocator::allocate)
1289 (polymorphic_allocator::allocate_object): Likewise.
1290 * include/std/string_view (basic_string_view::_S_compare): Likewise.
1291 * include/std/utility (in_range): Likewise.
1292 * testsuite/20_util/integer_comparisons/in_range_neg.cc: Adjust for
1293 extra error about incomplete type __int_limits<bool>.
1294 * testsuite/26_numerics/bit/bit.count/countl_one.cc: Include <limits>.
1295 * testsuite/26_numerics/bit/bit.count/countl_zero.cc: Likewise.
1296 * testsuite/26_numerics/bit/bit.count/countr_one.cc: Likewise.
1297 * testsuite/26_numerics/bit/bit.count/countr_zero.cc: Likewise.
1298 * testsuite/26_numerics/bit/bit.count/popcount.cc: Likewise.
1299 * testsuite/26_numerics/bit/bit.pow.two/ceil2_neg.cc: Likewise.
1300 * testsuite/26_numerics/bit/bit.pow.two/ceil2.cc: Likewise.
1301 * testsuite/26_numerics/bit/bit.pow.two/floor2.cc: Likewise.
1302 * testsuite/26_numerics/bit/bit.pow.two/ispow2.cc: Likewise.
1303 * testsuite/26_numerics/bit/bit.pow.two/log2p1.cc: Likewise.
1304 * testsuite/26_numerics/bit/bit.rotate/rotl.cc: Likewise.
1305 * testsuite/26_numerics/bit/bit.rotate/rotr.cc: Likewise.
1306
1307 * python/libstdcxx/v6/printers.py (StdCmpCatPrinter.to_string): Update
1308 value for partial_ordering::unordered.
1309
1310 * include/bits/iterator_concepts.h (indirectly_copyable_storable): Add
1311 const-qualified expression variations.
1312 * include/std/concepts (copyable): Likewise.
1313
1314 * include/std/type_traits (__is_standard_integer): New helper trait.
1315 * include/std/utility (cmp_equal, cmp_not_equal, cmp_less, cmp_greater)
1316 (cmp_less_equal, cmp_greater_equal, in_range): Define for C++20.
1317 * include/std/version (__cpp_lib_integer_comparison_functions): Define.
1318 * testsuite/20_util/integer_comparisons/1.cc: New test.
1319 * testsuite/20_util/integer_comparisons/2.cc: New test.
1320 * testsuite/20_util/integer_comparisons/equal.cc: New test.
1321 * testsuite/20_util/integer_comparisons/equal_neg.cc: New test.
1322 * testsuite/20_util/integer_comparisons/greater_equal.cc: New test.
1323 * testsuite/20_util/integer_comparisons/greater_equal_neg.cc: New test.
1324 * testsuite/20_util/integer_comparisons/greater_neg.cc: New test.
1325 * testsuite/20_util/integer_comparisons/in_range.cc: New test.
1326 * testsuite/20_util/integer_comparisons/in_range_neg.cc: New test.
1327 * testsuite/20_util/integer_comparisons/less.cc: New test.
1328 * testsuite/20_util/integer_comparisons/less_equal.cc: New test.
1329 * testsuite/20_util/integer_comparisons/less_equal_neg.cc: New test.
1330 * testsuite/20_util/integer_comparisons/less_neg.cc: New test.
1331 * testsuite/20_util/integer_comparisons/not_equal.cc: New test.
1332 * testsuite/20_util/integer_comparisons/not_equal_neg.cc: New test.
1333
1334 2020-02-16 Patrick Palka <ppalka@redhat.com>
1335
1336 * include/bits/ranges_algo.h (__lexicographical_compare_fn::operator()):
1337 Move code after an early exit constexpr if to under an else branch.
1338 * include/bits/ranges_algobase.h (__equal_fn::operator()): Likewise.
1339
1340 2020-02-15 Patrick Palka <ppalka@redhat.com>
1341
1342 * include/bits/ranges_algo.h: Adjust whitespace and formatting.
1343 * include/bits/ranges_algobase.h: Likewise.
1344 * include/bits/ranges_uninitialized.h: Likewise.
1345
1346 * include/bits/ranges_algo.h: (adjacent_find, all_of, any_of,
1347 binary_search, copy_if, count, count_if, equal_range, find, find_end,
1348 find_first_of, find_if, find_if_not, for_each, generate, generate_n,
1349 includes, inplace_merge, is_heap, is_heap_until, is_partitioned,
1350 is_permutation, is_sorted, is_sorted_until, lexicographical_compare,
1351 lower_bound, make_heap, max, max_element, merge, min, min_element,
1352 minmax, minmax_element, mismatch, next_permutation, none_of,
1353 nth_element, partial_sort, partial_sort_copy, partition, partition_copy,
1354 partition_point, pop_heap, prev_permutation, push_heap, remove,
1355 remove_copy, remove_copy_if, remove_if, replace, replace_copy,
1356 replace_copy_if, replace_if, reverse, reverse_copy, rotate, rotate_copy,
1357 search, search_n, set_difference, set_intersection,
1358 set_symmetric_difference, set_union, shuffle, sort, sort_heap,
1359 stable_partition, stable_sort, swap_ranges, transform, unique,
1360 unique_copy, upper_bound): Convert into function objects.
1361 * include/bits/ranges_algobase.h: (equal, copy, move, copy_n, fill_n,
1362 fill, move_backward, copy_backward): Likewise.
1363 * include/bits/ranges_uninitialized.h (uninitialized_default_construct,
1364 uninitialized_default_construct_n, uninitialized_value_construct,
1365 uninitialized_value_construct_n, uninitialized_copy,
1366 uninitialized_copy_n, uninitialized_move, uninitialized_move_n,
1367 uninitialized_fill, uninitialized_fill_n, construct_at, destroy_at,
1368 destroy, destroy_n): Likewise.
1369
1370 * include/bits/ranges_algo.h (ranges::__find_end): Fold into ...
1371 (ranges::find_end): ... here.
1372 (ranges::__lexicographical_compare): Fold into ...
1373 (ranges::lexicographical_compare): ... here.
1374 * include/bits/ranges_algobase.h (ranges::__equal): Fold into ...
1375 (ranges::equal): ... here.
1376
1377 2020-02-15 Jonathan Wakely <jwakely@redhat.com>
1378
1379 * include/bits/erase_if.h (__cpp_lib_erase_if): Define to 202002L.
1380 * include/std/deque: Likewise.
1381 * include/std/forward_list: Likewise.
1382 * include/std/list: Likewise.
1383 * include/std/string: Likewise.
1384 * include/std/vector: Likewise.
1385 * include/std/version: Likewise.
1386 * testsuite/23_containers/deque/erasure.cc: Test for new value.
1387 * testsuite/23_containers/forward_list/erasure.cc: Likewise.
1388 * testsuite/23_containers/list/erasure.cc: Likewise.
1389 * testsuite/23_containers/map/erasure.cc: Likewise.
1390 * testsuite/23_containers/set/erasure.cc: Likewise.
1391 * testsuite/23_containers/unordered_map/erasure.cc: Likewise.
1392 * testsuite/23_containers/unordered_set/erasure.cc: Likewise.
1393 * testsuite/23_containers/vector/erasure.cc: Likewise.
1394
1395 2020-02-15 Jonathan Wakely <jwakely@redhat.com>
1396
1397 * include/bits/random.h (uniform_random_bit_generator): Require min()
1398 and max() to be constant expressions and min() to be less than max().
1399 * testsuite/26_numerics/random/concept.cc: Check additional cases.
1400 * testsuite/26_numerics/random/pr60037-neg.cc: Adjust dg-error lineno.
1401
1402 2020-02-13 Patrick Palka <ppalka@redhat.com>
1403
1404 * include/Makefile.am: Add <bits/ranges_uninitialized.h>.
1405 * include/Makefile.in: Regenerate.
1406 * include/bits/ranges_uninitialized.h: New header.
1407 * include/std/memory: Include it.
1408 * testsuite/20_util/specialized_algorithms/destroy/constrained.cc: New
1409 test.
1410 * .../uninitialized_copy/constrained.cc: New test.
1411 * .../uninitialized_default_construct/constrained.cc: New test.
1412 * .../uninitialized_fill/constrained.cc: New test.
1413 * .../uninitialized_move/constrained.cc: New test.
1414 * .../uninitialized_value_construct/constrained.cc: New test.
1415
1416 * include/Makefile.am: Add bits/ranges_algobase.h
1417 * include/Makefile.in: Regenerate.
1418 * bits/ranges_algo.h: Include <bits/ranges_algobase.h> and refactor
1419 existing #includes.
1420 (__detail::__is_normal_iterator, __detail::is_reverse_iterator,
1421 __detail::__is_move_iterator, copy_result, move_result,
1422 __equal, equal, copy_result, move_result, move_backward_result,
1423 copy_backward_result, __copy_or_move_backward, __copy_or_move, copy,
1424 move, copy_backward, move_backward, copy_n_result, copy_n, fill_n,
1425 fill): Split out into ...
1426 * bits/range_algobase.h: ... this new header.
1427
1428 2020-02-12 Patrick Palka <ppalka@redhat.com>
1429
1430 LWG 3389 and LWG 3390
1431 * include/bits/stl_iterator.h (move_move_iterator): Use std::move when
1432 constructing the move_iterator with __i.
1433 (counted_iterator::counted_iterator): Use std::move when initializing
1434 M_current with __i.
1435 * testsuite/24_iterators/counted_iterator/lwg3389.cc: New test.
1436 * testsuite/24_iterators/move_iterator/lwg3390.cc: New test.
1437
1438 2020-02-12 Sandra Loosemore <sandra@codesourcery.com>
1439
1440 PR libstdc++/79193
1441 PR libstdc++/88999
1442
1443 * configure: Regenerated.
1444
1445 2020-02-12 François Dumont <fdumont@gcc.gnu.org>
1446
1447 * include/bits/hashtable.h
1448 (_Hashtable<>(_Hashtable&&, std::allocator_type&)): Add
1449 missing std namespace qualification to forward call.
1450
1451 2020-02-09 Jonathan Wakely <jwakely@redhat.com>
1452
1453 * testsuite/20_util/function_objects/range.cmp/equal_to.cc: Fix
1454 comment.
1455 * testsuite/20_util/function_objects/range.cmp/less.ccL Likewise.
1456
1457 * include/std/ranges: Fix non-ASCII characters in comment.
1458
1459 * include/bits/range_cmp.h (__detail::__eq_builtin_ptr_cmp): Require
1460 equality comparison to be valid and return bool.
1461 (__detail::__less_builtin_ptr_cmp): Likewise for less-than comparison.
1462 * testsuite/20_util/function_objects/range.cmp/equal_to.cc: Check
1463 type with ambiguous conversion to fundamental types.
1464 * testsuite/20_util/function_objects/range.cmp/less.cc: Likewise.
1465
1466 2020-02-07 Jonathan Wakely <jwakely@redhat.com>
1467
1468 * include/bits/iterator_concepts.h (iter_difference_t, iter_value_t):
1469 Use remove_cvref_t.
1470 (readable_traits): Rename to indirectly_readable_traits.
1471 (readable): Rename to indirectly_readable.
1472 (writable): Rename to indirectly_writable.
1473 (__detail::__iter_exchange_move): Do not use remove_reference_t.
1474 (indirectly_swappable): Adjust requires expression parameter types.
1475 expression.
1476 * include/bits/ranges_algo.h (ranges::transform, ranges::replace)
1477 (ranges::replace_if, ranges::generate_n, ranges::generate)
1478 (ranges::remove): Use new name for writable.
1479 * include/bits/stl_iterator.h (__detail::__common_iter_has_arrow):
1480 Use new name for readable.
1481 * include/ext/pointer.h (readable_traits<_Pointer_adapter<P>>): Use
1482 new name for readable_traits.
1483 * testsuite/24_iterators/associated_types/readable.traits.cc: Likewise.
1484 * testsuite/24_iterators/indirect_callable/projected.cc: Adjust for
1485 new definition of indirectly_readable.
1486
1487 * include/bits/stl_iterator.h (__detail::__common_iter_ptr): Change
1488 to take parameters of common_iterator, instead of the common_iterator
1489 type itself. Fix argument for __common_iter_has_arrow constraint.
1490 (iterator_traits<common_iterator<I, S>>::pointer): Adjust.
1491
1492 2020-02-07 Jonathan Wakely <jwakely@redhat.com>
1493
1494 * include/std/ranges (iota_view): Add braces to prevent -Wempty-body
1495 warning.
1496 (basic_istream_view::_Iterator::operator++()): Add missing return.
1497
1498 2020-02-07 Patrick Palka <ppalka@redhat.com>
1499
1500 * include/bits/ranges_algo.h: Remove extraneous &&.
1501
1502 * include/std/ranges (ranges::__detail::__stream_extractable,
1503 ranges::basic_istream_view, ranges::istream_view): Define.
1504 * testsuite/std/ranges/istream_view: New test.
1505
1506 Implement C++20 range adaptors
1507 * include/std/ranges: Include <bits/refwrap.h> and <tuple>.
1508 (subrange::_S_store_size): Mark as const instead of constexpr to
1509 avoid what seems to be a bug in GCC.
1510 (__detail::__box): Give it defaulted copy and move constructors.
1511 (ranges::views::_Single::operator()): Mark constexpr.
1512 (ranges::views::_Iota::operator()): Mark constexpr.
1513 (__detail::Empty): Define.
1514 (ranges::views::__closure::_RangeAdaptor,
1515 ranges::views::__closure::_RangeAdaptorClosure, ref_view, all_view,
1516 ranges::views::all, ranges::__detail::find_if,
1517 ranges::__detail::find_if_not, ranges::__detail::mismatch,
1518 ranges::detail::min, filter_view, ranges::views::filter, transform_view,
1519 ranges::views::transform, take_view, ranges::views::take,
1520 take_while_view, ranges::views::take_while, drop_view,
1521 ranges::views::drop, join_view, ranges::views::join,
1522 __detail::require_constant, __detail::tiny_range, split_view,
1523 ranges::views::split, ranges::views::_Counted, ranges::views::counted,
1524 common_view, ranges::views::common, reverse_view,
1525 ranges::views::reverse,
1526 ranges::views::__detail::__is_reversible_subrange,
1527 ranges::views::__detail::__is_reverse_view, reverse_view,
1528 ranges::views::reverse, __detail::__has_tuple_element, elements_view,
1529 ranges::views::elements, ranges::views::keys, ranges::views::values):
1530 Define.
1531 (views): Alias for ranges::views.
1532 (tuple_size<ranges::subrange<>>, tuple_element<0, ranges::subrange>,
1533 tuple_element<1, ranges::subrange>): New partial specializations.
1534 * testsuite/std/ranges/adaptors/all.cc: New test.
1535 * testsuite/std/ranges/adaptors/common.cc: Likewise.
1536 * testsuite/std/ranges/adaptors/counted.cc: Likewise.
1537 * testsuite/std/ranges/adaptors/drop.cc: Likewise.
1538 * testsuite/std/ranges/adaptors/drop_while.cc: Likewise.
1539 * testsuite/std/ranges/adaptors/elements.cc: Likewise.
1540 * testsuite/std/ranges/adaptors/filter.cc: Likewise.
1541 * testsuite/std/ranges/adaptors/join.cc: Likewise.
1542 * testsuite/std/ranges/adaptors/reverse.cc: Likewise.
1543 * testsuite/std/ranges/adaptors/split.cc: Likewise.
1544 * testsuite/std/ranges/adaptors/take.cc: Likewise.
1545 * testsuite/std/ranges/adaptors/take_while.cc: Likewise.
1546 * testsuite/std/ranges/adaptors/transform.cc: Likewise.
1547
1548 2020-02-07 Jonathan Wakely <jwakely@redhat.com>
1549
1550 * libsupc++/compare (__cmp_cat::type): Define typedef for underlying
1551 type of enumerations and comparison category types.
1552 (__cmp_cat::_Ord, __cmp_cat::_Ncmp): Add underlying type.
1553 (__cmp_cat::_Ncmp::unordered): Change value to 2.
1554 (partial_ordering::_M_value, weak_ordering::_M_value)
1555 (strong_ordering::_M_value): Change type to __cmp_cat::type.
1556 (partial_ordering::_M_is_ordered): Remove data member.
1557 (partial_ordering): Use second bit of _M_value for unordered. Adjust
1558 comparison operators.
1559 (weak_ordering::operator partial_ordering): Simplify to remove
1560 branches.
1561 (operator<=>(unspecified, weak_ordering)): Likewise.
1562 (strong_ordering::operator partial_ordering): Likewise.
1563 (strong_ordering::operator weak_ordering): Likewise.
1564 (operator<=>(unspecified, strong_ordering)): Likewise.
1565 * testsuite/18_support/comparisons/categories/partialord.cc: New test.
1566 * testsuite/18_support/comparisons/categories/strongord.cc: New test.
1567 * testsuite/18_support/comparisons/categories/weakord.cc: New test.
1568
1569 * include/std/ranges (iota_view::_Iterator): Fix typo in name of
1570 __cpp_lib_three_way_comparison macro and use deduced return type for
1571 operator<=>.
1572 * testsuite/std/ranges/iota/iterator.cc: New test.
1573
1574 2020-02-07 Patrick Palka <ppalka@redhat.com>
1575 Jonathan Wakely <jwakely@redhat.com>
1576
1577 Implement C++20 constrained algorithms
1578 * include/Makefile.am: Add new header.
1579 * include/Makefile.in: Regenerate.
1580 * include/std/algorithm: Include <bits/ranges_algo.h>.
1581 * include/bits/ranges_algo.h: New file.
1582 * testsuite/25_algorithms/adjacent_find/constrained.cc: New test.
1583 * testsuite/25_algorithms/all_of/constrained.cc: New test.
1584 * testsuite/25_algorithms/any_of/constrained.cc: New test.
1585 * testsuite/25_algorithms/binary_search/constrained.cc: New test.
1586 * testsuite/25_algorithms/copy/constrained.cc: New test.
1587 * testsuite/25_algorithms/copy_backward/constrained.cc: New test.
1588 * testsuite/25_algorithms/copy_if/constrained.cc: New test.
1589 * testsuite/25_algorithms/copy_n/constrained.cc: New test.
1590 * testsuite/25_algorithms/count/constrained.cc: New test.
1591 * testsuite/25_algorithms/count_if/constrained.cc: New test.
1592 * testsuite/25_algorithms/equal/constrained.cc: New test.
1593 * testsuite/25_algorithms/equal_range/constrained.cc: New test.
1594 * testsuite/25_algorithms/fill/constrained.cc: New test.
1595 * testsuite/25_algorithms/fill_n/constrained.cc: New test.
1596 * testsuite/25_algorithms/find/constrained.cc: New test.
1597 * testsuite/25_algorithms/find_end/constrained.cc: New test.
1598 * testsuite/25_algorithms/find_first_of/constrained.cc: New test.
1599 * testsuite/25_algorithms/find_if/constrained.cc: New test.
1600 * testsuite/25_algorithms/find_if_not/constrained.cc: New test.
1601 * testsuite/25_algorithms/for_each/constrained.cc: New test.
1602 * testsuite/25_algorithms/generate/constrained.cc: New test.
1603 * testsuite/25_algorithms/generate_n/constrained.cc: New test.
1604 * testsuite/25_algorithms/heap/constrained.cc: New test.
1605 * testsuite/25_algorithms/includes/constrained.cc: New test.
1606 * testsuite/25_algorithms/inplace_merge/constrained.cc: New test.
1607 * testsuite/25_algorithms/is_partitioned/constrained.cc: New test.
1608 * testsuite/25_algorithms/is_permutation/constrained.cc: New test.
1609 * testsuite/25_algorithms/is_sorted/constrained.cc: New test.
1610 * testsuite/25_algorithms/is_sorted_until/constrained.cc: New test.
1611 * testsuite/25_algorithms/lexicographical_compare/constrained.cc: New
1612 test.
1613 * testsuite/25_algorithms/lower_bound/constrained.cc: New test.
1614 * testsuite/25_algorithms/max/constrained.cc: New test.
1615 * testsuite/25_algorithms/max_element/constrained.cc: New test.
1616 * testsuite/25_algorithms/merge/constrained.cc: New test.
1617 * testsuite/25_algorithms/min/constrained.cc: New test.
1618 * testsuite/25_algorithms/min_element/constrained.cc: New test.
1619 * testsuite/25_algorithms/minmax/constrained.cc: New test.
1620 * testsuite/25_algorithms/minmax_element/constrained.cc: New test.
1621 * testsuite/25_algorithms/mismatch/constrained.cc: New test.
1622 * testsuite/25_algorithms/move/constrained.cc: New test.
1623 * testsuite/25_algorithms/move_backward/constrained.cc: New test.
1624 * testsuite/25_algorithms/next_permutation/constrained.cc: New test.
1625 * testsuite/25_algorithms/none_of/constrained.cc: New test.
1626 * testsuite/25_algorithms/nth_element/constrained.cc: New test.
1627 * testsuite/25_algorithms/partial_sort/constrained.cc: New test.
1628 * testsuite/25_algorithms/partial_sort_copy/constrained.cc: New test.
1629 * testsuite/25_algorithms/partition/constrained.cc: New test.
1630 * testsuite/25_algorithms/partition_copy/constrained.cc: New test.
1631 * testsuite/25_algorithms/partition_point/constrained.cc: New test.
1632 * testsuite/25_algorithms/prev_permutation/constrained.cc: New test.
1633 * testsuite/25_algorithms/remove/constrained.cc: New test.
1634 * testsuite/25_algorithms/remove_copy/constrained.cc: New test.
1635 * testsuite/25_algorithms/remove_copy_if/constrained.cc: New test.
1636 * testsuite/25_algorithms/remove_if/constrained.cc: New test.
1637 * testsuite/25_algorithms/replace/constrained.cc: New test.
1638 * testsuite/25_algorithms/replace_copy/constrained.cc: New test.
1639 * testsuite/25_algorithms/replace_copy_if/constrained.cc: New test.
1640 * testsuite/25_algorithms/replace_if/constrained.cc: New test.
1641 * testsuite/25_algorithms/reverse/constrained.cc: New test.
1642 * testsuite/25_algorithms/reverse_copy/constrained.cc: New test.
1643 * testsuite/25_algorithms/rotate/constrained.cc: New test.
1644 * testsuite/25_algorithms/rotate_copy/constrained.cc: New test.
1645 * testsuite/25_algorithms/search/constrained.cc: New test.
1646 * testsuite/25_algorithms/search_n/constrained.cc: New test.
1647 * testsuite/25_algorithms/set_difference/constrained.cc: New test.
1648 * testsuite/25_algorithms/set_intersection/constrained.cc: New test.
1649 * testsuite/25_algorithms/set_symmetric_difference/constrained.cc: New
1650 test.
1651 * testsuite/25_algorithms/set_union/constrained.cc: New test.
1652 * testsuite/25_algorithms/shuffle/constrained.cc: New test.
1653 * testsuite/25_algorithms/sort/constrained.cc: New test.
1654 * testsuite/25_algorithms/stable_partition/constrained.cc: New test.
1655 * testsuite/25_algorithms/stable_sort/constrained.cc: New test.
1656 * testsuite/25_algorithms/swap_ranges/constrained.cc: New test.
1657 * testsuite/25_algorithms/transform/constrained.cc: New test.
1658 * testsuite/25_algorithms/unique/constrained.cc: New test.
1659 * testsuite/25_algorithms/unique_copy/constrained.cc: New test.
1660 * testsuite/25_algorithms/upper_bound/constrained.cc: New test.
1661
1662 2020-02-06 Jonathan Wakely <jwakely@redhat.com>
1663
1664 * include/bits/stl_iterator.h (__detail::__common_iter_ptr): Fix PR
1665 number in comment. Fix indentation.
1666
1667 * include/bits/stl_algobase.h (__iter_swap, __iter_swap<true>): Remove
1668 redundant _GLIBCXX20_CONSTEXPR.
1669
1670 * include/std/ranges (viewable_range): Replace decay_t with
1671 remove_cvref_t (LWG 3375).
1672
1673 2020-02-05 Jonathan Wakely <jwakely@redhat.com>
1674
1675 * include/bits/iterator_concepts.h (iter_reference_t)
1676 (iter_rvalue_reference_t, iter_common_reference_t, indirect_result_t):
1677 Remove workarounds for PR c++/67704.
1678 * testsuite/24_iterators/aliases.cc: New test.
1679
1680 2020-02-05 Patrick Palka <ppalka@redhat.com>
1681
1682 * include/bits/stl_iterator.h (move_iterator::move_iterator): Move __i
1683 when initializing _M_current.
1684 (move_iterator::base): Split into two overloads differing in
1685 ref-qualifiers as in P1207R4 for C++20.
1686
1687 2020-02-04 Jonathan Wakely <jwakely@redhat.com>
1688
1689 * include/std/functional (_GLIBCXX_NOT_FN_CALL_OP): Un-define after
1690 use.
1691
1692 PR libstdc++/93562
1693 * include/bits/unique_ptr.h (__uniq_ptr_impl::swap): Define.
1694 (unique_ptr::swap, unique_ptr<T[], D>::swap): Call it.
1695 * testsuite/20_util/unique_ptr/modifiers/93562.cc: New test.
1696
1697 2020-02-01 Andrew Burgess <andrew.burgess@embecosm.com>
1698
1699 * configure: Regenerate.
1700
1701 2020-01-31 Patrick Palka <ppalka@redhat.com>
1702
1703 * testsuite/24_iterators/range_operations/distance.cc: Do not assume
1704 test_range::end() returns the same type as test_range::begin().
1705 * testsuite/24_iterators/range_operations/next.cc: Likewise.
1706 * testsuite/24_iterators/range_operations/prev.cc: Likewise.
1707 * testsuite/util/testsuite_iterators.h (__gnu_test::test_range::end):
1708 Always return a sentinel<I>.
1709
1710 2020-01-29 Jonathan Wakely <jwakely@redhat.com>
1711
1712 PR libstdc++/92895
1713 * include/std/stop_token (stop_token::stop_possible()): Call new
1714 _M_stop_possible() function.
1715 (stop_token::stop_requested()): Do not use stop_possible().
1716 (stop_token::binary_semaphore): New class, as temporary stand-in for
1717 std::binary_semaphore.
1718 (stop_token::_Stop_cb::_M_callback): Add noexcept to type.
1719 (stop_token::_Stop_cb::_M_destroyed, stop_token::_Stop_cb::_M_done):
1720 New data members for symchronization with stop_callback destruction.
1721 (stop_token::_Stop_cb::_Stop_cb): Make non-template.
1722 (stop_token::_Stop_cb::_M_linked, stop_token::_Stop_cb::_S_execute):
1723 Remove.
1724 (stop_token::_Stop_cb::_M_run): New member function.
1725 (stop_token::_Stop_state::_M_stopped, stop_token::_Stop_state::_M_mtx):
1726 Remove.
1727 (stop_token::_Stop_state::_M_owners): New data member to track
1728 reference count for ownership.
1729 (stop_token::_Stop_state::_M_value): New data member combining a
1730 spinlock, the stop requested flag, and the reference count for
1731 associated stop_source objects.
1732 (stop_token::_Stop_state::_M_requester): New data member for
1733 synchronization with stop_callback destruction.
1734 (stop_token::_Stop_state::_M_stop_possible()): New member function.
1735 (stop_token::_Stop_state::_M_stop_requested()): Inspect relevant bit
1736 of _M_value.
1737 (stop_token::_Stop_state::_M_add_owner)
1738 (stop_token::_Stop_state::_M_release_ownership)
1739 (stop_token::_Stop_state::_M_add_ssrc)
1740 (stop_token::_Stop_state::_M_sub_ssrc): New member functions for
1741 updating reference counts.
1742 (stop_token::_Stop_state::_M_lock, stop_token::_Stop_state::_M_unlock)
1743 (stop_token::_Stop_state::_M_lock, stop_token::_Stop_state::_M_unlock)
1744 (stop_token::_Stop_state::_M_try_lock)
1745 (stop_token::_Stop_state::_M_try_lock_and_stop)
1746 (stop_token::_Stop_state::_M_do_try_lock): New member functions for
1747 managing spinlock.
1748 (stop_token::_Stop_state::_M_request_stop): Use atomic operations to
1749 read and update state. Release lock while running callbacks. Use new
1750 data members to synchronize with callback destruction.
1751 (stop_token::_Stop_state::_M_remove_callback): Likewise.
1752 (stop_token::_Stop_state::_M_register_callback): Use atomic operations
1753 to read and update state.
1754 (stop_token::_Stop_state_ref): Handle type to manage _Stop_state,
1755 replacing shared_ptr.
1756 (stop_source::stop_source(const stop_source&)): Update reference count.
1757 (stop_source::operator=(const stop_source&)): Likewise.
1758 (stop_source::~stop_source()): Likewise.
1759 (stop_source::stop_source(stop_source&&)): Define as defaulted.
1760 (stop_source::operator=(stop_source&&)): Establish postcondition on
1761 parameter.
1762 (stop_callback): Enforce preconditions on template parameter. Replace
1763 base class with data member of new _Cb_impl type.
1764 (stop_callback::stop_callback(const stop_token&, Cb&&))
1765 (stop_callback::stop_callback(stop_token&&, Cb&&)): Fix TOCTTOU race.
1766 (stop_callback::_Cb_impl): New type wrapping _Callback member and
1767 defining the _S_execute member function.
1768 * testsuite/30_threads/stop_token/stop_callback/deadlock-mt.cc: New
1769 test.
1770 * testsuite/30_threads/stop_token/stop_callback/deadlock.cc: New test.
1771 * testsuite/30_threads/stop_token/stop_callback/destroy.cc: New test.
1772 * testsuite/30_threads/stop_token/stop_callback/destructible_neg.cc:
1773 New test.
1774 * testsuite/30_threads/stop_token/stop_callback/invocable_neg.cc: New
1775 test.
1776 * testsuite/30_threads/stop_token/stop_callback/invoke.cc: New test.
1777 * testsuite/30_threads/stop_token/stop_source/assign.cc: New test.
1778 * testsuite/30_threads/stop_token/stop_token/stop_possible.cc: New
1779 test.
1780
1781 * libsupc++/compare (__detail::__3way_builtin_ptr_cmp): Use
1782 three_way_comparable_with.
1783 (__detail::__3way_cmp_with): Remove workaround for fixed bug.
1784 (compare_three_way::operator()): Remove redundant constraint from
1785 requires-clause.
1786 (__detail::_Synth3way::operator()): Use three_way_comparable_with
1787 instead of workaround.
1788 * testsuite/18_support/comparisons/object/93479.cc: Prune extra
1789 output due to simplified constraints on compare_three_way::operator().
1790
1791 PR libstdc++/93479
1792 * libsupc++/compare (__3way_builtin_ptr_cmp): Require <=> to be valid.
1793 * testsuite/18_support/comparisons/object/93479.cc: New test.
1794
1795 * testsuite/std/ranges/access/end.cc: Do not assume test_range::end()
1796 returns the same type as test_range::begin(). Add comments.
1797 * testsuite/std/ranges/access/rbegin.cc: Likewise.
1798 * testsuite/std/ranges/access/rend.cc: Likewise.
1799 * testsuite/std/ranges/range.cc: Do not assume the sentinel for
1800 test_range is the same as its iterator type.
1801 * testsuite/util/testsuite_iterators.h (test_range::sentinel): Add
1802 operator- overloads to satisfy sized_sentinel_for when the iterator
1803 satisfies random_access_iterator.
1804
1805 2020-01-28 Jonathan Wakely <jwakely@redhat.com>
1806
1807 PR libstdc++/93470
1808 * include/bits/refwrap.h (reference_wrapper::operator()): Restrict
1809 static assertion to object types.
1810
1811 PR libstdc++/93325
1812 * acinclude.m4 (GLIBCXX_ENABLE_LIBSTDCXX_TIME): Use AC_SEARCH_LIBS for
1813 clock_gettime instead of explicit glibc version check.
1814 * configure: Regenerate.
1815
1816 2020-01-28 Martin Liska <mliska@suse.cz>
1817
1818 PR libstdc++/93478
1819 * include/std/atomic: Fix typo.
1820 * include/std/optional: Likewise.
1821
1822 2020-01-27 Andrew Burgess <andrew.burgess@embecosm.com>
1823
1824 * configure: Regenerate.
1825
1826 2020-01-27 Jonathan Wakely <jwakely@redhat.com>
1827
1828 PR libstdc++/93426
1829 * include/std/span (span): Fix deduction guide.
1830 * testsuite/23_containers/span/deduction.cc: New test.
1831
1832 2020-01-24 Jonathan Wakely <jwakely@redhat.com>
1833
1834 * libsupc++/compare (__cmp_cat::_Eq): Remove enumeration type.
1835 (__cmp_cat::_Ord::equivalent): Add enumerator.
1836 (__cmp_cat::_Ord::_Less, __cmp_cat::_Ord::_Greater): Rename to less
1837 and greater.
1838 (partial_ordering, weak_ordering, strong_ordering): Remove
1839 constructors taking __cmp_cat::_Eq parameters. Use renamed
1840 enumerators.
1841
1842 2020-01-24 Maciej W. Rozycki <macro@wdc.com>
1843
1844 * acinclude.m4: Handle `--with-toolexeclibdir='.
1845 * Makefile.in: Regenerate.
1846 * aclocal.m4: Regenerate.
1847 * configure: Regenerate.
1848 * doc/Makefile.in: Regenerate.
1849 * include/Makefile.in: Regenerate.
1850 * libsupc++/Makefile.in: Regenerate.
1851 * po/Makefile.in: Regenerate.
1852 * python/Makefile.in: Regenerate.
1853 * src/Makefile.in: Regenerate.
1854 * src/c++11/Makefile.in: Regenerate.
1855 * src/c++17/Makefile.in: Regenerate.
1856 * src/c++98/Makefile.in: Regenerate.
1857 * src/filesystem/Makefile.in: Regenerate.
1858 * testsuite/Makefile.in: Regenerate.
1859
1860 2020-01-23 Alexandre Oliva <oliva@adacore.com>
1861
1862 * crossconfig.m4 (GLIBCXX_CHECK_MATH_DECL): Reject macros.
1863 * configure: Rebuild.
1864
1865 * testsuite/27_io/fpos/mbstate_t/1.cc: Zero-init mbstate_t.
1866
1867 2020-01-23 Jonathan Wakely <jwakely@redhat.com>
1868
1869 PR libstdc++/91947
1870 * include/Makefile.am (${host_builddir}/largefile-config.h): Simplify
1871 rule.
1872 * include/Makefile.in: Regenerate.
1873
1874 2020-01-20 Jonathan Wakely <jwakely@redhat.com>
1875
1876 * doc/xml/faq.xml: Fix grammar.
1877 * doc/xml/manual/appendix_contributing.xml: Improve instructions.
1878 * doc/xml/manual/spine.xml: Update copyright years.
1879 * doc/html/*: Regenerate.
1880
1881 2020-01-19 Eric S. Raymond <esr@thyrsus.com>
1882
1883 * doc/xml/faq.xml: Update for SVN -> Git transition.
1884 * doc/xml/manual/appendix_contributing.xml: Likewise.
1885 * doc/xml/manual/status_cxx1998.xml: Likewise.
1886 * doc/xml/manual/status_cxx2011.xml: Likewise.
1887 * doc/xml/manual/status_cxx2014.xml: Likewise.
1888 * doc/xml/manual/status_cxx2017.xml: Likewise.
1889 * doc/xml/manual/status_cxx2020.xml: Likewise.
1890 * doc/xml/manual/status_cxxtr1.xml: Likewise.
1891 * doc/xml/manual/status_cxxtr24733.xml: Likewise.
1892
1893 2020-01-18 Iain Sandoe <iain@sandoe.co.uk>
1894
1895 * include/Makefile.am: Add coroutine to the std set.
1896 * include/Makefile.in: Regenerated.
1897 * include/std/coroutine: New file.
1898
1899 2020-01-17 Jonathan Wakely <jwakely@redhat.com>
1900
1901 PR libstdc++/92376
1902 * include/bits/c++config: Only do PSTL config when the header is
1903 present, to fix freestanding.
1904 * libsupc++/new_opa.cc [!_GLIBCXX_HOSTED]: Declare allocation
1905 functions if they were detected by configure.
1906
1907 2020-01-16 Kai-Uwe Eckhardt <kuehro@gmx.de>
1908 Matthew Bauer <mjbauer95@gmail.com>
1909 Jonathan Wakely <jwakely@redhat.com>
1910
1911 PR bootstrap/64271 (partial)
1912 * config/os/bsd/netbsd/ctype_base.h (ctype_base::mask): Change type
1913 to unsigned short.
1914 (ctype_base::alpha, ctype_base::digit, ctype_base::xdigit)
1915 (ctype_base::print, ctype_base::graph, ctype_base::alnum): Sync
1916 definitions with NetBSD upstream.
1917 (ctype_base::blank): Use _CTYPE_BL.
1918 * config/os/bsd/netbsd/ctype_configure_char.cc (_C_ctype_): Remove
1919 Declaration.
1920 (ctype<char>::classic_table): Use _C_ctype_tab_ instead of _C_ctype_.
1921 (ctype<char>::do_toupper, ctype<char>::do_tolower): Cast char
1922 parameters to unsigned char.
1923 * config/os/bsd/netbsd/ctype_inline.h (ctype<char>::is): Likewise.
1924
1925 2020-01-16 François Dumont <fdumont@gcc.gnu.org>
1926
1927 PR libstdc++/91263
1928 * include/bits/hashtable.h (_Hashtable<>): Make _Equality<> friend.
1929 * include/bits/hashtable_policy.h: Include <bits/stl_algo.h>.
1930 (_Equality_base): Remove.
1931 (_Equality<>::_M_equal): Review implementation. Use
1932 std::is_permutation.
1933 * testsuite/23_containers/unordered_multiset/operators/1.cc
1934 (Hash, Equal, test02, test03): New.
1935 * testsuite/23_containers/unordered_set/operators/1.cc
1936 (Hash, Equal, test02, test03): New.
1937
1938 2020-01-15 Jonathan Wakely <jwakely@redhat.com>
1939
1940 PR libstdc++/93267
1941 * include/bits/iterator_concepts.h (__max_diff_type, __max_size_type):
1942 Move here from <bits/range_access.h> and define using __int128 when
1943 available.
1944 (__is_integer_like, __is_signed_integer_like): Move here from
1945 <bits/range_access.h>.
1946 (weakly_incrementable): Use __is_signed_integer_like.
1947 * include/bits/range_access.h (__max_diff_type, __max_size_type)
1948 (__is_integer_like, __is_signed_integer_like): Move to
1949 <bits/iterator_concepts.h>.
1950 (__make_unsigned_like_t): Move here from <ranges>.
1951 * include/std/ranges (__make_unsigned_like_t): Move to
1952 <bits/range_access.h>.
1953 (iota_view): Replace using-directive with using-declarations.
1954 * testsuite/std/ranges/iota/93267.cc: New test.
1955 * testsuite/std/ranges/iota_view.cc: Move to new 'iota' sub-directory.
1956
1957 2020-01-13 Jonathan Wakely <jwakely@redhat.com>
1958
1959 PR libstdc++/93244
1960 * include/bits/fs_path.h (path::generic_string<C,A>)
1961 [_GLIBCXX_FILESYSTEM_IS_WINDOWS]: Convert root-dir to forward-slash.
1962 * testsuite/27_io/filesystem/path/generic/generic_string.cc: Check
1963 root-dir is converted to forward slash in generic pathname.
1964 * testsuite/27_io/filesystem/path/generic/utf.cc: New test.
1965 * testsuite/27_io/filesystem/path/generic/wchar_t.cc: New test.
1966
1967 PR libstdc++/58605
1968 * include/bits/atomic_base.h (__cpp_lib_atomic_value_initialization):
1969 Define.
1970 (__atomic_flag_base, __atomic_base, __atomic_base<_PTp*>)
1971 (__atomic_float): Add default member initializer for C++20.
1972 * include/std/atomic (atomic): Likewise.
1973 (atomic::atomic()): Remove noexcept-specifier on default constructor.
1974 * include/std/version (__cpp_lib_atomic_value_initialization): Define.
1975 * testsuite/29_atomics/atomic/cons/assign_neg.cc: Adjust dg-error line
1976 number.
1977 * testsuite/29_atomics/atomic/cons/copy_neg.cc: Likewise.
1978 * testsuite/29_atomics/atomic/cons/value_init.cc: New test.
1979 * testsuite/29_atomics/atomic_flag/cons/value_init.cc: New test.
1980 * testsuite/29_atomics/atomic_flag/requirements/trivial.cc: Adjust
1981 expected result for is_trivially_default_constructible.
1982 * testsuite/29_atomics/atomic_float/requirements.cc: Likewise.
1983 * testsuite/29_atomics/atomic_float/value_init.cc: New test.
1984 * testsuite/29_atomics/atomic_integral/cons/assign_neg.cc: Likewise.
1985 * testsuite/29_atomics/atomic_integral/cons/copy_neg.cc: Likewise.
1986 * testsuite/29_atomics/atomic_integral/cons/value_init.cc
1987 * testsuite/29_atomics/atomic_integral/requirements/trivial.cc: Adjust
1988 expected results for is_trivially_default_constructible.
1989 * testsuite/util/testsuite_common_types.h (has_trivial_dtor): Add
1990 new test generator.
1991
1992 2020-01-10 Jonathan Wakely <jwakely@redhat.com>
1993
1994 * testsuite/util/testsuite_iterators.h: Improve comment.
1995
1996 * testsuite/25_algorithms/equal/deque_iterators/1.cc: Don't use C++11
1997 initialization syntax.
1998
1999 PR libstdc++/92285
2000 * include/bits/streambuf_iterator.h (istreambuf_iterator): Make type
2001 of base class independent of __cplusplus value.
2002 [__cplusplus < 201103L] (istreambuf_iterator::reference): Override the
2003 type defined in the base class
2004 * testsuite/24_iterators/istreambuf_iterator/92285.cc: New test.
2005 * testsuite/24_iterators/istreambuf_iterator/requirements/
2006 base_classes.cc: Adjust expected base class for C++98.
2007
2008 2020-01-09 Olivier Hainque <hainque@adacore.com>
2009
2010 * doc/xml/manual/appendix_contributing.xml: Document _C2
2011 as a reserved identifier, by VxWorks.
2012 * include/bits/stl_map.h: Rename _C2 template typenames as _Cmp2.
2013 * include/bits/stl_multimap.h: Likewise.
2014
2015 2020-01-09 Jonathan Wakely <jwakely@redhat.com>
2016
2017 * include/ext/extptr_allocator.h (_ExtPtr_allocator::operator==)
2018 (_ExtPtr_allocator::operator!=): Add missing const qualifiers.
2019 * include/ext/pointer.h (readable_traits<_Pointer_adapter<S>>): Add
2020 partial specialization to disambiguate the two constrained
2021 specializations.
2022
2023 * include/experimental/type_traits (experimental::is_pod_v): Disable
2024 -Wdeprecated-declarations warnings around reference to std::is_pod.
2025 * include/std/type_traits (is_pod_v): Likewise.
2026 * testsuite/18_support/max_align_t/requirements/2.cc: Also check
2027 is_standard_layout and is_trivial. Do not check is_pod for C++20.
2028 * testsuite/20_util/is_pod/requirements/explicit_instantiation.cc:
2029 Add -Wno-deprecated for C++20.
2030 * testsuite/20_util/is_pod/requirements/typedefs.cc: Likewise.
2031 * testsuite/20_util/is_pod/value.cc: Likewise.
2032 * testsuite/experimental/type_traits/value.cc: Likewise.
2033
2034 2020-01-09 JeanHeyd "ThePhD" Meneide <phdofthehouse@gmail.com>
2035
2036 * include/bits/c++config (_GLIBCXX20_DEPRECATED): Add new macro.
2037 * include/std/type_traits (is_pod, is_pod_v): Deprecate for C++20.
2038 * testuite/20_util/is_pod/deprecated-2a.cc: New test.
2039
2040 2020-01-09 Jonathan Wakely <jwakely@redhat.com>
2041
2042 PR libstdc++/93205
2043 * include/bits/random.h (operator>>): Check stream operation succeeds.
2044 * include/bits/random.tcc (operator<<): Remove redundant __ostream_type
2045 typedefs.
2046 (operator>>): Remove redundant __istream_type typedefs. Check stream
2047 operations succeed.
2048 (__extract_params): New function to fill a vector from a stream.
2049 * testsuite/26_numerics/random/pr60037-neg.cc: Adjust dg-error line.
2050
2051 PR libstdc++/93208
2052 * config/abi/pre/gnu.ver: Add new exports.
2053 * include/std/memory_resource (memory_resource::~memory_resource()):
2054 Do not define inline.
2055 (monotonic_buffer_resource::~monotonic_buffer_resource()): Likewise.
2056 * src/c++17/memory_resource.cc (memory_resource::~memory_resource()):
2057 Define.
2058 (monotonic_buffer_resource::~monotonic_buffer_resource()): Define.
2059 * testsuite/20_util/monotonic_buffer_resource/93208.cc: New test.
2060
2061 2020-01-09 François Dumont <fdumont@gcc.gnu.org>
2062
2063 PR libstdc++/92124
2064 * include/bits/hashtable.h (_Hashtable<>::__alloc_node_gen_t): New
2065 template alias.
2066 (_Hashtable<>::__fwd_value_for): New.
2067 (_Hashtable<>::_M_assign_elements<>): Remove _NodeGenerator template
2068 parameter.
2069 (_Hashtable<>::_M_assign<>): Add _Ht template parameter.
2070 (_Hashtable<>::operator=(const _Hashtable<>&)): Adapt.
2071 (_Hashtable<>::_M_move_assign): Adapt. Replace std::move_if_noexcept
2072 with std::move.
2073 (_Hashtable<>::_Hashtable(const _Hashtable&)): Adapt.
2074 (_Hashtable<>::_Hashtable(const _Hashtable&, const allocator_type&)):
2075 Adapt.
2076 (_Hashtable<>::_Hashtable(_Hashtable&&, const allocator_type&)):
2077 Adapt.
2078 * testsuite/23_containers/unordered_set/92124.cc: New.
2079
2080 2020-01-08 Jonathan Wakely <jwakely@redhat.com>
2081
2082 PR libstdc++/93201
2083 * src/c++17/fs_ops.cc (do_remove_all): New function implementing more
2084 detailed error reporting for remove_all. Check result of recursive
2085 call before incrementing iterator.
2086 (remove_all(const path&), remove_all(const path&, error_code&)): Use
2087 do_remove_all.
2088 * src/filesystem/ops.cc (remove_all(const path&, error_code&)): Check
2089 result of recursive call before incrementing iterator.
2090 * testsuite/27_io/filesystem/operations/remove_all.cc: Check errors
2091 are reported correctly.
2092 * testsuite/experimental/filesystem/operations/remove_all.cc: Likewise.
2093
2094 2020-01-07 Thomas Rodgers <trodgers@redhat.com>
2095
2096 * include/std/condition_variable
2097 (condition_variable_any::wait_on): Rename to match current draft
2098 standard.
2099 (condition_variable_any::wait_on_until): Likewise.
2100 (condition_variable_any::wait_on_for): Likewise.
2101 * testsuite/30_threads/condition_variable_any/stop_token/wait_on.cc:
2102 Adjust tests to account for renamed methods.
2103
2104 2020-01-07 François Dumont <fdumont@gcc.gnu.org>
2105
2106 PR libstdc++/92124
2107 * include/bits/stl_tree.h
2108 (_Rb_tree<>::_M_move_assign(_Rb_tree&, false_type)): Replace
2109 std::move_if_noexcept by std::move.
2110 * testsuite/23_containers/map/92124.cc: New.
2111 * testsuite/23_containers/set/92124.cc: New.
2112
2113 2020-01-06 Jonathan Wakely <jwakely@redhat.com>
2114
2115 * include/std/stop_token (stop_token): Remove operator!= (LWG 3254).
2116 (stop_source): Likewise (LWG 3362).
2117 * testsuite/30_threads/stop_token/stop_source.cc: Test equality
2118 comparisons.
2119
2120 * include/bits/stl_algobase.h (__is_byte_iter, __min_cmp)
2121 (lexicographical_compare_three_way): Do not depend on
2122 __cpp_lib_concepts.
2123 * include/std/version (__cpp_lib_three_way_comparison): Only define
2124 when __cpp_lib_concepts is defined.
2125 * libsupc++/compare (__cpp_lib_three_way_comparison): Likewise.
2126
2127 2020-01-03 Jonathan Wakely <jwakely@redhat.com>
2128
2129 * include/bits/stl_algobase.h (lexicographical_compare_three_way):
2130 Only define four-argument overload when __cpp_lib_concepts is defined.
2131
2132 2020-01-01 John David Anglin <danglin@gcc.gnu.org>
2133
2134 * config/abi/post/hppa-linux-gnu/baseline_symbols.txt: Update.
2135
2136 2020-01-01 Jakub Jelinek <jakub@redhat.com>
2137
2138 Update copyright years.
2139 \f
2140 Copyright (C) 2020 Free Software Foundation, Inc.
2141
2142 Copying and distribution of this file, with or without modification,
2143 are permitted in any medium without royalty provided the copyright
2144 notice and this notice are preserved.