Index: boost/unordered/detail/equivalent.hpp =================================================================== --- boost/unordered/detail/equivalent.hpp (revision 80833) +++ boost/unordered/detail/equivalent.hpp (working copy) @@ -676,9 +676,9 @@ if(begin == group2) { link_pointer end1 = group1->group_prev_; - link_pointer end2 = group2->group_prev_; + link_pointer end2 = end->group_prev_; group1->group_prev_ = end2; - group2->group_prev_ = end1; + end->group_prev_ = end1; } } } Index: boost/unordered/detail/table.hpp =================================================================== --- boost/unordered/detail/table.hpp (revision 80833) +++ boost/unordered/detail/table.hpp (working copy) @@ -618,7 +618,16 @@ { for(;;) { n = static_cast(n->next_); - if (n == end) return; + if (n == end) { + if (n) { + std::size_t new_bucket_index = + policy::to_bucket(bucket_count_, n->hash_); + if (bucket_index != new_bucket_index) { + get_bucket(new_bucket_index)->next_ = prev; + } + } + return; + } std::size_t new_bucket_index = policy::to_bucket(bucket_count_, n->hash_);