mirror of https://github.com/CGAL/cgal
Workaround bug in gcc (#8820)
Fixes [these errors](https://cgal.geometryfactory.com/CGAL/testsuite/CGAL-6.1-Ic-122/Alpha_wrap_3/TestReport_lrineau_Ubuntu-GCC_master_CXX20-Release.gz) cc @mglisse
This commit is contained in:
commit
051f56967b
|
|
@ -177,6 +177,8 @@ namespace internal {
|
||||||
template <typename Element>
|
template <typename Element>
|
||||||
static void set_erase_counter(Element &, unsigned int) {}
|
static void set_erase_counter(Element &, unsigned int) {}
|
||||||
template <typename Element>
|
template <typename Element>
|
||||||
|
static void restore_erase_counter(Element*, unsigned int) {}
|
||||||
|
template <typename Element>
|
||||||
static void increment_erase_counter(Element &) {}
|
static void increment_erase_counter(Element &) {}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
@ -192,12 +194,24 @@ namespace internal {
|
||||||
return e.erase_counter();
|
return e.erase_counter();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
template <typename Element>
|
||||||
|
static unsigned int erase_counter(Element* e)
|
||||||
|
{
|
||||||
|
return e->erase_counter();
|
||||||
|
}
|
||||||
|
|
||||||
template <typename Element>
|
template <typename Element>
|
||||||
static void set_erase_counter(Element &e, unsigned int c)
|
static void set_erase_counter(Element &e, unsigned int c)
|
||||||
{
|
{
|
||||||
e.set_erase_counter(c);
|
e.set_erase_counter(c);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
template <typename Element>
|
||||||
|
static void restore_erase_counter(Element* e, unsigned int c)
|
||||||
|
{
|
||||||
|
e->set_erase_counter(c);
|
||||||
|
}
|
||||||
|
|
||||||
template <typename Element>
|
template <typename Element>
|
||||||
static void increment_erase_counter(Element &e)
|
static void increment_erase_counter(Element &e)
|
||||||
{
|
{
|
||||||
|
|
@ -402,9 +416,11 @@ public:
|
||||||
pointer ret = free_list;
|
pointer ret = free_list;
|
||||||
free_list = clean_pointee(ret);
|
free_list = clean_pointee(ret);
|
||||||
const auto ts = Time_stamper::time_stamp(ret);
|
const auto ts = Time_stamper::time_stamp(ret);
|
||||||
|
const auto ec = EraseCounterStrategy<T>::erase_counter(ret);
|
||||||
new (ret) value_type(std::forward<Args>(args)...);
|
new (ret) value_type(std::forward<Args>(args)...);
|
||||||
Time_stamper::restore_timestamp(ret, ts);
|
Time_stamper::restore_timestamp(ret, ts);
|
||||||
Time_stamper::set_time_stamp(ret, time_stamp);
|
Time_stamper::set_time_stamp(ret, time_stamp);
|
||||||
|
EraseCounterStrategy<T>::restore_erase_counter(ret, ec);
|
||||||
CGAL_assertion(type(ret) == USED);
|
CGAL_assertion(type(ret) == USED);
|
||||||
++size_;
|
++size_;
|
||||||
return iterator(ret, 0);
|
return iterator(ret, 0);
|
||||||
|
|
@ -435,8 +451,10 @@ public:
|
||||||
CGAL_precondition(type(ptr) == USED);
|
CGAL_precondition(type(ptr) == USED);
|
||||||
EraseCounterStrategy<T>::increment_erase_counter(*x);
|
EraseCounterStrategy<T>::increment_erase_counter(*x);
|
||||||
const auto ts = Time_stamper::time_stamp(ptr);
|
const auto ts = Time_stamper::time_stamp(ptr);
|
||||||
|
const auto ec = EraseCounterStrategy<T>::erase_counter(*x);
|
||||||
std::allocator_traits<allocator_type>::destroy(alloc, ptr);
|
std::allocator_traits<allocator_type>::destroy(alloc, ptr);
|
||||||
Time_stamper::restore_timestamp(ptr, ts);
|
Time_stamper::restore_timestamp(ptr, ts);
|
||||||
|
EraseCounterStrategy<T>::restore_erase_counter(ptr, ec);
|
||||||
|
|
||||||
put_on_free_list(ptr);
|
put_on_free_list(ptr);
|
||||||
--size_;
|
--size_;
|
||||||
|
|
|
||||||
|
|
@ -80,6 +80,8 @@ namespace CCC_internal {
|
||||||
template <typename Element>
|
template <typename Element>
|
||||||
static void set_erase_counter(Element &, unsigned int) {}
|
static void set_erase_counter(Element &, unsigned int) {}
|
||||||
template <typename Element>
|
template <typename Element>
|
||||||
|
static void restore_erase_counter(Element*, unsigned int) {}
|
||||||
|
template <typename Element>
|
||||||
static void increment_erase_counter(Element &) {}
|
static void increment_erase_counter(Element &) {}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
@ -95,12 +97,24 @@ namespace CCC_internal {
|
||||||
return e.erase_counter();
|
return e.erase_counter();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
template <typename Element>
|
||||||
|
static unsigned int erase_counter(Element* e)
|
||||||
|
{
|
||||||
|
return e->erase_counter();
|
||||||
|
}
|
||||||
|
|
||||||
template <typename Element>
|
template <typename Element>
|
||||||
static void set_erase_counter(Element &e, unsigned int c)
|
static void set_erase_counter(Element &e, unsigned int c)
|
||||||
{
|
{
|
||||||
e.set_erase_counter(c);
|
e.set_erase_counter(c);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
template <typename Element>
|
||||||
|
static void restore_erase_counter(Element* e, unsigned int c)
|
||||||
|
{
|
||||||
|
e->set_erase_counter(c);
|
||||||
|
}
|
||||||
|
|
||||||
template <typename Element>
|
template <typename Element>
|
||||||
static void increment_erase_counter(Element &e)
|
static void increment_erase_counter(Element &e)
|
||||||
{
|
{
|
||||||
|
|
@ -353,9 +367,11 @@ public:
|
||||||
pointer ret = init_insert(fl);
|
pointer ret = init_insert(fl);
|
||||||
auto erase_counter = EraseCounterStrategy<T>::erase_counter(*ret);
|
auto erase_counter = EraseCounterStrategy<T>::erase_counter(*ret);
|
||||||
const auto ts = Time_stamper::time_stamp(ret);
|
const auto ts = Time_stamper::time_stamp(ret);
|
||||||
|
const auto ec = EraseCounterStrategy<T>::erase_counter(ret);
|
||||||
new (ret) value_type(std::forward<Args>(args)...);
|
new (ret) value_type(std::forward<Args>(args)...);
|
||||||
Time_stamper::restore_timestamp(ret, ts);
|
Time_stamper::restore_timestamp(ret, ts);
|
||||||
EraseCounterStrategy<T>::set_erase_counter(*ret, erase_counter);
|
EraseCounterStrategy<T>::set_erase_counter(*ret, erase_counter);
|
||||||
|
EraseCounterStrategy<T>::restore_erase_counter(ret, ec);
|
||||||
return finalize_insert(ret, fl);
|
return finalize_insert(ret, fl);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -386,8 +402,10 @@ private:
|
||||||
|
|
||||||
auto ptr = &*x;
|
auto ptr = &*x;
|
||||||
const auto ts = Time_stamper::time_stamp(ptr);
|
const auto ts = Time_stamper::time_stamp(ptr);
|
||||||
|
const auto ec = EraseCounterStrategy<T>::erase_counter(*x);
|
||||||
std::allocator_traits<allocator_type>::destroy(m_alloc, &*x);
|
std::allocator_traits<allocator_type>::destroy(m_alloc, &*x);
|
||||||
Time_stamper::restore_timestamp(ptr, ts);
|
Time_stamper::restore_timestamp(ptr, ts);
|
||||||
|
EraseCounterStrategy<T>::restore_erase_counter(ptr, ec);
|
||||||
|
|
||||||
put_on_free_list(&*x, fl);
|
put_on_free_list(&*x, fl);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue