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