From 78d1a30e6554002693e60f9aed52c39ff839e39c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ion=20Gazta=C3=B1aga?= Date: Mon, 30 Sep 2024 23:18:41 +0200 Subject: [PATCH] Fixes #261 ('"End iterators are not dereferencable") --- include/boost/container/detail/flat_tree.hpp | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/include/boost/container/detail/flat_tree.hpp b/include/boost/container/detail/flat_tree.hpp index 1400abd..d7a45f9 100644 --- a/include/boost/container/detail/flat_tree.hpp +++ b/include/boost/container/detail/flat_tree.hpp @@ -342,9 +342,11 @@ void flat_tree_sort_contiguous_to_adopt // is_contiguous_container == true tseq.clear(); const bool use_tseq_storage = tseq_unused_storage_size > seq_unused_storage_size; + value_type * const seq_beg = boost::movelib::iterator_to_raw_pointer(seq.data()); + boost::movelib::adaptive_sort - ( boost::movelib::iterator_to_raw_pointer(seq.begin()) - , boost::movelib::iterator_to_raw_pointer(seq.end()) + ( seq_beg + , seq_beg + seq.size() , comp , use_tseq_storage ? tseq_unused_storage_addr : seq_unused_storage_addr , use_tseq_storage ? tseq_unused_storage_size : seq_unused_storage_size); @@ -375,9 +377,11 @@ template void flat_tree_adopt_sequence_unique// is_contiguous_container == true (SequenceContainer &tseq, BOOST_RV_REF(SequenceContainer) seq, Compare comp, dtl::true_) { + typedef typename SequenceContainer::value_type value_type; + value_type * const seq_beg = boost::movelib::iterator_to_raw_pointer(seq.data()); boost::movelib::pdqsort - ( boost::movelib::iterator_to_raw_pointer(seq.begin()) - , boost::movelib::iterator_to_raw_pointer(seq.end()) + ( seq_beg + , seq_beg + seq.size() , comp); seq.erase(boost::movelib::unique (seq.begin(), seq.end(), boost::movelib::negate(comp)), seq.cend());