https://gcc.gnu.org/bugzilla/show_bug.cgi?id=127675

--- Comment #7 from Jonathan Wakely <redi at gcc dot gnu.org> ---
--- 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;
+    });
   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();

   {

Reply via email to