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