Commit 44e4da65 by Jonathan Wakely Committed by Jonathan Wakely

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
parent 8384956a
2019-10-04 Jonathan Wakely <jwakely@redhat.com>
* 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 <span> for C++20.
* testsuite/17_intro/names.cc: Do not define 'e' for C++20.
......
......@@ -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);
}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment