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