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