forked from boostorg/unordered
Add temporary polyfill for foa table's assignment operator so that the definition of the allocator copy-assignment operator isn't required
This commit is contained in:
@ -975,16 +975,31 @@ public:
|
|||||||
delete_arrays(arrays);
|
delete_arrays(arrays);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
template <class AllocTraits>
|
||||||
|
typename std::enable_if<
|
||||||
|
!AllocTraits::propagate_on_container_copy_assignment::value,
|
||||||
|
void
|
||||||
|
>::type
|
||||||
|
copy_assign_helper(const table&) {}
|
||||||
|
|
||||||
|
template <class AllocTraits>
|
||||||
|
typename std::enable_if<
|
||||||
|
AllocTraits::propagate_on_container_copy_assignment::value,
|
||||||
|
void
|
||||||
|
>::type
|
||||||
|
copy_assign_helper(const table& x)
|
||||||
|
{
|
||||||
|
if(al()!=x.al())reserve(0);
|
||||||
|
al()=x.al();
|
||||||
|
}
|
||||||
|
|
||||||
table& operator=(const table& x)
|
table& operator=(const table& x)
|
||||||
{
|
{
|
||||||
if(this!=&x){
|
if(this!=&x){
|
||||||
clear();
|
clear();
|
||||||
h()=x.h();
|
h()=x.h();
|
||||||
pred()=x.pred();
|
pred()=x.pred();
|
||||||
if(alloc_traits::propagate_on_container_copy_assignment::value){
|
copy_assign_helper<alloc_traits>(x);
|
||||||
if(al()!=x.al())reserve(0);
|
|
||||||
al()=x.al();
|
|
||||||
}
|
|
||||||
// TODO may shrink arrays and miss an opportunity for memory reuse
|
// TODO may shrink arrays and miss an opportunity for memory reuse
|
||||||
reserve(x.size());
|
reserve(x.size());
|
||||||
x.for_all_elements([this](value_type* p){
|
x.for_all_elements([this](value_type* p){
|
||||||
|
Reference in New Issue
Block a user