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>
|
||||
static void set_erase_counter(Element &, unsigned int) {}
|
||||
template <typename Element>
|
||||
static void restore_erase_counter(Element*, unsigned int) {}
|
||||
template <typename Element>
|
||||
static void increment_erase_counter(Element &) {}
|
||||
};
|
||||
|
||||
|
|
@ -192,12 +194,24 @@ namespace internal {
|
|||
return e.erase_counter();
|
||||
}
|
||||
|
||||
template <typename Element>
|
||||
static unsigned int erase_counter(Element* e)
|
||||
{
|
||||
return e->erase_counter();
|
||||
}
|
||||
|
||||
template <typename Element>
|
||||
static void set_erase_counter(Element &e, unsigned int 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>
|
||||
static void increment_erase_counter(Element &e)
|
||||
{
|
||||
|
|
@ -402,9 +416,11 @@ public:
|
|||
pointer ret = free_list;
|
||||
free_list = clean_pointee(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)...);
|
||||
Time_stamper::restore_timestamp(ret, ts);
|
||||
Time_stamper::set_time_stamp(ret, time_stamp);
|
||||
EraseCounterStrategy<T>::restore_erase_counter(ret, ec);
|
||||
CGAL_assertion(type(ret) == USED);
|
||||
++size_;
|
||||
return iterator(ret, 0);
|
||||
|
|
@ -435,8 +451,10 @@ public:
|
|||
CGAL_precondition(type(ptr) == USED);
|
||||
EraseCounterStrategy<T>::increment_erase_counter(*x);
|
||||
const auto ts = Time_stamper::time_stamp(ptr);
|
||||
const auto ec = EraseCounterStrategy<T>::erase_counter(*x);
|
||||
std::allocator_traits<allocator_type>::destroy(alloc, ptr);
|
||||
Time_stamper::restore_timestamp(ptr, ts);
|
||||
EraseCounterStrategy<T>::restore_erase_counter(ptr, ec);
|
||||
|
||||
put_on_free_list(ptr);
|
||||
--size_;
|
||||
|
|
|
|||
|
|
@ -80,6 +80,8 @@ namespace CCC_internal {
|
|||
template <typename Element>
|
||||
static void set_erase_counter(Element &, unsigned int) {}
|
||||
template <typename Element>
|
||||
static void restore_erase_counter(Element*, unsigned int) {}
|
||||
template <typename Element>
|
||||
static void increment_erase_counter(Element &) {}
|
||||
};
|
||||
|
||||
|
|
@ -95,12 +97,24 @@ namespace CCC_internal {
|
|||
return e.erase_counter();
|
||||
}
|
||||
|
||||
template <typename Element>
|
||||
static unsigned int erase_counter(Element* e)
|
||||
{
|
||||
return e->erase_counter();
|
||||
}
|
||||
|
||||
template <typename Element>
|
||||
static void set_erase_counter(Element &e, unsigned int 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>
|
||||
static void increment_erase_counter(Element &e)
|
||||
{
|
||||
|
|
@ -353,9 +367,11 @@ public:
|
|||
pointer ret = init_insert(fl);
|
||||
auto erase_counter = EraseCounterStrategy<T>::erase_counter(*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)...);
|
||||
Time_stamper::restore_timestamp(ret, ts);
|
||||
EraseCounterStrategy<T>::set_erase_counter(*ret, erase_counter);
|
||||
EraseCounterStrategy<T>::restore_erase_counter(ret, ec);
|
||||
return finalize_insert(ret, fl);
|
||||
}
|
||||
|
||||
|
|
@ -386,8 +402,10 @@ private:
|
|||
|
||||
auto ptr = &*x;
|
||||
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);
|
||||
Time_stamper::restore_timestamp(ptr, ts);
|
||||
EraseCounterStrategy<T>::restore_erase_counter(ptr, ec);
|
||||
|
||||
put_on_free_list(&*x, fl);
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue