From 9c02f05faf3c8ba5242bf7231d7032ccb77bc4cf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ion=20Gazta=C3=B1aga?= Date: Tue, 31 Mar 2026 00:25:33 +0200 Subject: [PATCH] Fix segmented generate_n bug --- .../experimental/segmented_generate_n.hpp | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/include/boost/container/experimental/segmented_generate_n.hpp b/include/boost/container/experimental/segmented_generate_n.hpp index a792d8e..bdc1192 100644 --- a/include/boost/container/experimental/segmented_generate_n.hpp +++ b/include/boost/container/experimental/segmented_generate_n.hpp @@ -109,13 +109,17 @@ SegIt generate_n_scan(SegIt first, SegIt last, Size& count, Generator& gen, segm } else { local_iterator lcur = generate_n_scan(traits::local(first), traits::end(scur), count, gen, is_local_seg_t()); - for(++scur; scur != slast && count > 0; ++scur) - lcur = generate_n_scan(traits::begin(scur), traits::end(scur), count, gen, is_local_seg_t()); - if(count > 0) - lcur = generate_n_scan(traits::begin(slast), traits::local(last), count, gen, is_local_seg_t()); + if(count > 0) { + for(++scur; scur != slast; ++scur) { + lcur = generate_n_scan(traits::begin(scur), traits::end(scur), count, gen, is_local_seg_t()); + if(!count) + break; + } + if(count > 0 && scur == slast) + lcur = generate_n_scan(traits::begin(slast), traits::local(last), count, gen, is_local_seg_t()); + } return traits::compose(scur, lcur); } - } template