+2019-05-17 François Dumont <fdumont@gcc.gnu.org>
+
+ * include/bits/stl_deque.h
+ (_Deque_iterator<>::__ptr_to): Remove, use std::__ptr_rebind.
+ (_Deque_base(_Deque_base&&, const allocator_type&)): New.
+ (_Deque_base::_Deque_impl_data): New.
+ (_Deque_base::_Deque_impl): Inherit latter.
+ (_Deque_base::_Deque_impl::_M_swap_data): Move...
+ (_Deque_base::_Deque_impl_data::_M_swap_data): ... here.
+ (_Deque_base::_Deque_impl()): Add noexcept qualification.
+ (_Deque_base::_Deque_impl(_Deque_impl&&, _Tp_alloc_type&&)): New.
+ (_Deque_base::_Deque_impl::_M_get_Tp_allocator()): Remove static_cast.
+ (deque<>::deque()): Default.
+ (deque<>::deque(deque&&)): Default.
+ (deque<>::deque(deque&&, const allocator_type&, false_type)): New.
+ (deque<>::deque(deque&&, const allocator_type&, true_type)): New.
+ (deque<>::deque(deque&&, const allocator_type&)): Delegate to latters.
+ (deque<>::deque<_It>(_It, _It, const allocator_type&)): Use
+ _M_range_initialize.
+ (deque<>::assign<_It>(_It, _It)): Use _M_assign_aux.
+ (deque<>::resize(size_type, const value_type&)): Share a single
+ implementation.
+ (deque<>::insert<_It>(const_iterator, _It, _It)): Use
+ _M_range_insert_aux.
+ [__cplusplus >= 201103L](_M_initialize_dispatch): Remove.
+ [__cplusplus >= 201103L](_M_assign_dispatch): Remove.
+ [__cplusplus >= 201103L](_M_insert_dispatch): Remove.
+ * testsuite/23_containers/deque/allocator/default_init.cc: New.
+
+2019-05-17 Jonathan Wakely <jwakely@redhat.com>
+
+ PR libstdc++/90246
+ * include/std/variant (holds_alternative, get, get_if): Improve
+ static assertion messages.
+ (bad_variant_access::bad_variant_access()): Change default message.
+ (__throw_bad_variant_access(bool)): New overload.
+ (get): Use new overload.
+ (visit, visit<R>): Improve exception message.
+
+ * testsuite/20_util/variant/compile.cc: Fix narrowing test for ILP32
+ targets. Add more cases from P0608R3.
+ * testsuite/20_util/variant/run.cc: Add more cases from P0608R3.
+
+ * include/bits/random.h (seed_seq::param): Fix non-reserved name.
+ * include/experimental/type_traits (is_detected_exact)
+ (is_detected_exact_v): Likewise.
+ * include/pstl/execution_defs.h (is_execution_policy)
+ (is_execution_policy_v, __enable_if_execution_policy): Likewise.
+ * include/pstl/execution_impl.h (__policy_traits): Likewise.
+ * testsuite/17_intro/names.cc: Check for more non-reserved names.
+ * testsuite/experimental/names.cc: New test.
+
+ PR libstdc++/85965
+ * include/bits/hashtable.h (_Hashtable::~_Hashtable()): Remove static
+ assertions from the destructor.
+ * include/bits/hashtable_policy.h (_Hash_code_base::_M_hash_code):
+ Move static_assert for hash function to here.
+ (_Hash_table_base::_M_equals): Move static_assert for equality
+ predicate to here.
+ * include/bits/stl_tree.h (_Rb_tree::_S_value(_Const_Link_type)):
+ Remove.
+ (_Rb_tree::_S_key(_Const_Link_type)): Move assertions here. Access
+ the value directly instead of calling _S_value.
+ (_Rb_tree::_S_value(_Const_Base_ptr)): Remove.
+ (_Rb_tree::_S_key(_Const_Base_ptr)): Do downcast and forward to
+ _S_key(_Const_Link_type).
+ * testsuite/23_containers/set/85965.cc: Check construction,
+ destruction, assignment and size() do not trigger the assertions.
+ * testsuite/23_containers/unordered_set/85965.cc: Likewise.
+ * testsuite/23_containers/map/48101_neg.cc: Call find and adjust
+ expected errors.
+ * testsuite/23_containers/multimap/48101_neg.cc: Likewise.
+ * testsuite/23_containers/multiset/48101_neg.cc: Likewise.
+ * testsuite/23_containers/set/48101_neg.cc: Likewise.
+ * testsuite/23_containers/unordered_map/48101_neg.cc: Likewise.
+ * testsuite/23_containers/unordered_multimap/48101_neg.cc: Likewise.
+ * testsuite/23_containers/unordered_multiset/48101_neg.cc: Likewise.
+ * testsuite/23_containers/unordered_set/48101_neg.cc: Likewise.
+
+ * include/bits/invoke.h [__cplusplus < 201703L] (__invoke_r<void>):
+ Use _GLIBCXX14_CONSTEXPR because void functions cannot be constexpr
+ in C++11.
+
+ * doc/xml/manual/status_cxx2020.xml: Update P0608R3, P0777R1, and
+ P1165R1 entries.
+ * doc/html/*: Regenerate.
+ * include/std/tuple (make_from_tuple): Use remove_reference_t instead
+ of decay_t (P0777R1).
+
+2019-05-17 François Dumont <fdumont@gcc.gnu.org>
+
+ Move from state of allocators (LWG2593)
+ * include/bits/stl_deque.h
+ (_Deque_base(_Deque_base&&, false_type)): Remove.
+ (_Deque_base(_Deque_base&&, true_type)): Remove.
+ (_Deque_base(_Deque_base&&)): Adapt.
+ (_Deque_base::_M_move_impl()): Remove.
+ * testsuite/util/testsuite_allocator.h
+ (propagating_allocator(propagating_allocator&&)): Preserve move from
+ state.
+ * testsuite/23_containers/deque/allocator/move_assign.cc (test02):
+ Adapt.
+ * testsuite/23_containers/forward_list/allocator/move_assign.cc (test02):
+ Adapt.
+ * testsuite/23_containers/list/allocator/move_assign.cc (test02): Adapt.
+ * testsuite/23_containers/map/allocator/move_assign.cc (test02): Adapt.
+ * testsuite/23_containers/multimap/allocator/move_assign.cc (test02):
+ Adapt.
+ * testsuite/23_containers/multiset/allocator/move_assign.cc (test02):
+ Adapt.
+ * testsuite/23_containers/set/allocator/move_assign.cc (test02): Adapt.
+ * testsuite/23_containers/unordered_map/allocator/move_assign.cc
+ (test02): Adapt.
+ * testsuite/23_containers/unordered_multimap/allocator/move_assign.cc
+ (test02): Adapt.
+ * testsuite/23_containers/unordered_multiset/allocator/move_assign.cc
+ (test02): Adapt.
+ * testsuite/23_containers/unordered_set/allocator/move_assign.cc
+ (test02): Adapt.
+ * testsuite/23_containers/vector/allocator/move_assign.cc (test02):
+ Adapt.
+ * testsuite/23_containers/vector/bool/allocator/move_assign.cc (test02):
+ Adapt.
+ * testsuite/21_strings/basic_string/allocator/char/move_assign.cc
+ (test02): Adapt.
+ * testsuite/21_strings/basic_string/allocator/wchar_t/move_assign.cc
+ (test02): Adapt.
+
+2019-05-16 Jonathan Wakely <jwakely@redhat.com>
+
+ * src/c++17/fs_ops.cc (absolute(const path&, error_code&))
+ [_GLIBCXX_FILESYSTEM_IS_WINDOWS]: Remove bogus assertion.
+
+ * include/std/variant (__overload_set): Remove.
+ (_Arr): New helper.
+ (_Build_FUN): New class template to define a single FUN overload,
+ with specializations to prevent unwanted conversions, as per P0608R3.
+ (_Build_FUNs): New class template to build an overload set of FUN.
+ (_FUN_type): New alias template to perform overload resolution.
+ (__accepted_type): Use integer_constant base for failure case. Use
+ _FUN_type for successful case.
+ (variant::__accepted_index): Use _Tp instead of _Tp&&.
+ (variant::variant(_Tp&&)): Likewise.
+ (variant::operator=(_Tp&&)): Likewise.
+
+ * include/std/variant (_Variant_storage<false, _Types...>::_M_reset):
+ Replace raw visitation with a runtime check for the valueless state
+ and a non-raw visitor.
+ (_Variant_storage<false, _Types...>::_M_reset_impl): Remove.
+ (variant::index()): Remove branch.
+ (variant::swap(variant&)): Use valueless_by_exception() instead of
+ comparing the index to variant_npos, and add likelihood attribute.
+
+ * include/bits/hashtable_policy.h (_Equal_helper): Remove.
+ (_Hashtable_base::_Equal_hash_code): Define new class template.
+ (_Hashtable_base::_M_equals): Use _Equal_hash_code instead of
+ _Equal_helper.
+
+ * include/bits/hashtable_policy.h (_Hashtable_ebo_helper::_S_get):
+ Replace with _M_get non-static member function.
+ (_Hashtable_ebo_helper::_S_cget): Replace with _M_cget non-static
+ member function.
+ (_Hash_code_base, _Local_iterator_base, _Hashtable_base):
+ (_Hashtable_alloc): Adjust to use non-static members of EBO helper.
+
+ * include/bits/hashtable_policy.h (_Hash_code_base::_M_swap): Use
+ _S_get accessors for members in EBO helpers.
+ (_Hash_code_base::_M_extract(), _Hash_code_base::_M_ranged_hash())
+ (_Hash_code_base::_M_h1(), _Hash_code_base::_M_h2()): Remove non-const
+ overloads.
+ (_Hashtable_base::_M_swap): Use _S_get accessors for members in EBO
+ helpers.
+ (_Hashtable_base::_M_eq()): Remove non-const overload.
+
+2019-05-15 Jonathan Wakely <jwakely@redhat.com>
+
+ * include/std/variant (visit, visit<R>): Qualify calls to __do_visit.
+
+2019-05-14 Jonathan Wakely <jwakely@redhat.com>
+
+ * testsuite/util/testsuite_allocator.h (NullablePointer::operator bool):
+ Fix return value.
+
+2019-05-14 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE>
+
+ * config/os/solaris/solaris2.10: Move to ...
+ * config/os/solaris: ... this.
+ * configure.host (os_include_dir): Adapt.
+ (abi_baseline_pair): Remove Solaris 10 handling.
+ * config/abi/post/i386-solaris2.10: Remove.
+ * config/abi/post/sparc-solaris2.10: Remove.
+ * config/abi/post/i386-solaris2.11: Rename to ...
+ * config/abi/post/i386-solaris: ... this.
+ * config/abi/post/sparc-solaris2.11: Rename to ...
+ * config/abi/post/sparc-solaris: ... this.
+
+ * libsupc++/new_opa.cc [_GLIBCXX_HAVE_MEMALIGN] [__sun]: Remove
+ workaround.
+
+ * testsuite/ext/enc_filebuf/char/13598.cc: Remove *-*-solaris2.10
+ xfail.
+
+2019-05-14 Jonathan Wakely <jwakely@redhat.com>
+
+ * include/std/variant (__visit_with_index): Remove typedef.
+ (__deduce_visit_result): New tag type.
+ (__raw_visit, __raw_idx_visit): New helper functions for "raw"
+ visitation of possibly-valueless variants, forwarding to __do_visit
+ with the relevant tag type.
+ (_Variant_storage<false, _Types...>::_M_reset_impl): Use __raw_visit
+ and make lambda return void.
+ (__variant_construct): Likewise.
+ (_Copy_assign_base::operator=, _Move_assign_base::operator=): Use
+ __raw_idx_visit and make lambda return void.
+ (_Multi_array::__untag_result): Add metafunction to check the function
+ pointer type for a tag type that dictates the kind of visitation.
+ (_Multi_array<_Ret(*)(_Visitor, _Variants...), __first, __rest...>):
+ Use decltype(auto) instead of tagged function pointer type.
+ (__gen_vtable_impl): Remove bool non-type parameter and unused
+ _Variant_tuple parameter.
+ (__gen_vtable_impl::__visit_invoke_impl): Remove.
+ (__gen_vtable_impl::__do_visit_invoke): Remove.
+ (__gen_vtable_impl::__do_visit_invoke_r): Remove.
+ (__gen_vtable_impl::__visit_invoke): Use if-constexpr and __invoke_r
+ for the visit<R> case, rather than dispatching to separate functions.
+ (_VARIANT_RELATION_FUNCTION_TEMPLATE): Use __raw_idx_visit and make
+ lambda return void.
+ (variant::swap): Likewise.
+ (__do_visit): Replace two non-type template parameters with a single
+ type parameter, so that the caller must specify the visitor's return
+ type (or one of the tag types).
+ (visit): Deduce a return type from the visitor and use the
+ __deduce_visit_result tag to enforce that all overloads return the
+ same type.
+ (visit<R>): Call __do_visit<R> with explicit result type.
+ (__variant_hash_call_base_impl::operator()): Use __raw_visit and make
+ lambda return void.
+
2019-05-14 Nina Dinka Ranns <dinka.ranns@gmail.com>
nonesuch is insufficiently useless (lwg2996)