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