https://gcc.gnu.org/bugzilla/show_bug.cgi?id=127675
--- Comment #8 from Jonathan Wakely <redi at gcc dot gnu.org> ---
(In reply to Jonathan Wakely from comment #7)
> --- a/libstdc++-v3/include/ext/pb_ds/detail/ov_tree_map_/erase_fn_imps.hpp
> +++ b/libstdc++-v3/include/ext/pb_ds/detail/ov_tree_map_/erase_fn_imps.hpp
> @@ -93,7 +93,11 @@ erase_if(Pred pred)
> value_vector a_new_values = s_value_alloc.allocate(new_size);
> iterator target_it = a_new_values;
> cond_dtor<size_type> cd(a_new_values, target_it, new_size);
> - _GLIBCXX_DEBUG_ONLY(debug_base::clear());
> + _GLIBCXX_DEBUG_ONLY(
> + struct dbase : debug_base {
> + using debug_base::swap;
> + using debug_base::insert_new;
> + });
Oops, that should be:
+ } d);
to declare the object 'd'
> for (iterator source_it = begin(); source_it != m_end_it; ++source_it)
> {
> if (!pred(*source_it))
> @@ -101,12 +105,13 @@ erase_if(Pred pred)
> new (const_cast<void*>(static_cast<const void*>(target_it)))
> value_type(*source_it);
>
> - _GLIBCXX_DEBUG_ONLY(debug_base::insert_new(PB_DS_V2F(*source_it)));
> + _GLIBCXX_DEBUG_ONLY(d.insert_new(PB_DS_V2F(*source_it)));
> ++target_it;
> }
> }
>
> reallocate_metadata((node_update*)this, new_size);
> + _GLIBCXX_DEBUG_ONLY(d.swap(*this));
> cd.set_no_action();
>
> {