From 44e4da6505935116a2468c56f425c33e70caa10c Mon Sep 17 00:00:00 2001 From: Jonathan Wakely Date: Fri, 4 Oct 2019 13:17:01 +0100 Subject: [PATCH] Adjust tr1::_Hashtable to work with std::allocator in C++20 In C++20 std::allocator will no longer define construct and destroy member functions, so using them needs to go via allocator_traits. * include/tr1/hashtable.h (tr1::_Hashtable::_M_allocate_node): Use __gnu_cxx::__alloc_traits for allocator construct function. (tr1::_Hashtable::_M_deallocate_node): Likewise for destroy function. From-SVN: r276575 --- libstdc++-v3/ChangeLog | 4 ++++ libstdc++-v3/include/tr1/hashtable.h | 8 ++++++-- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog index 0076d95100b..6a3b61453e2 100644 --- a/libstdc++-v3/ChangeLog +++ b/libstdc++-v3/ChangeLog @@ -1,5 +1,9 @@ 2019-10-04 Jonathan Wakely + * include/tr1/hashtable.h (tr1::_Hashtable::_M_allocate_node): Use + __gnu_cxx::__alloc_traits for allocator construct function. + (tr1::_Hashtable::_M_deallocate_node): Likewise for destroy function. + * include/precompiled/stdc++.h: Include for C++20. * testsuite/17_intro/names.cc: Do not define 'e' for C++20. diff --git a/libstdc++-v3/include/tr1/hashtable.h b/libstdc++-v3/include/tr1/hashtable.h index c1b5c9e8fda..85fec6a6a14 100644 --- a/libstdc++-v3/include/tr1/hashtable.h +++ b/libstdc++-v3/include/tr1/hashtable.h @@ -429,7 +429,9 @@ namespace tr1 _Node* __n = _M_node_allocator.allocate(1); __try { - _M_get_Value_allocator().construct(&__n->_M_v, __v); + _Value_allocator_type __a = _M_get_Value_allocator(); + typedef __gnu_cxx::__alloc_traits<_Value_allocator_type> _Traits; + _Traits::construct(__a, &__n->_M_v, __v); __n->_M_next = 0; return __n; } @@ -449,7 +451,9 @@ namespace tr1 _H1, _H2, _Hash, _RehashPolicy, __chc, __cit, __uk>:: _M_deallocate_node(_Node* __n) { - _M_get_Value_allocator().destroy(&__n->_M_v); + _Value_allocator_type __a = _M_get_Value_allocator(); + typedef __gnu_cxx::__alloc_traits<_Value_allocator_type> _Traits; + _Traits::destroy(__a, &__n->_M_v); _M_node_allocator.deallocate(__n, 1); } -- 2.30.2