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