2222#include < boost/container/detail/workaround.hpp>
2323#include < boost/container/experimental/segmented_iterator_traits.hpp>
2424#include < boost/container/detail/iterator.hpp>
25+ #include < boost/move/utility_core.hpp>
26+
2527
2628namespace boost {
2729namespace container {
@@ -35,7 +37,7 @@ namespace detail_algo {
3537
3638template <class RAIter , class Generator >
3739void segmented_generate_dispatch
38- (RAIter first, RAIter last, Generator & gen, const non_segmented_iterator_tag &, const std::random_access_iterator_tag &)
40+ (RAIter first, RAIter last, Generator gen, const non_segmented_iterator_tag &, const std::random_access_iterator_tag &)
3941{
4042 typedef typename iterator_traits<RAIter>::difference_type difference_type;
4143
@@ -68,15 +70,15 @@ void segmented_generate_dispatch
6870template <class FwdIt , class Sent , class Generator , class Tag , class Cat >
6971 BOOST_CONTAINER_FORCEINLINE typename algo_enable_if_c<
7072 !Tag::value || is_sentinel<Sent, FwdIt>::value>::type
71- segmented_generate_dispatch (FwdIt first, Sent last, Generator & gen, Tag, Cat)
73+ segmented_generate_dispatch (FwdIt first, Sent last, Generator gen, Tag, Cat)
7274{
7375 for (; first != last; ++first)
7476 *first = gen ();
7577}
7678
7779template <class SegIter , class Generator , class Cat >
7880void segmented_generate_dispatch
79- (SegIter first, SegIter last, Generator & gen, segmented_iterator_tag, Cat)
81+ (SegIter first, SegIter last, Generator gen, segmented_iterator_tag, Cat)
8082{
8183 typedef segmented_iterator_traits<SegIter> traits;
8284 typedef typename traits::local_iterator local_iterator;
@@ -88,15 +90,15 @@ void segmented_generate_dispatch
8890 segment_iterator slast = traits::segment (last);
8991
9092 if (sfirst == slast) {
91- (segmented_generate_dispatch)(traits::local (first), traits::local (last), gen, is_local_seg_t (), local_cat_t ());
93+ (segmented_generate_dispatch)(traits::local (first), traits::local (last), boost::move ( gen) , is_local_seg_t (), local_cat_t ());
9294 }
9395 else {
94- (segmented_generate_dispatch)(traits::local (first), traits::end (sfirst), gen, is_local_seg_t (), local_cat_t ());
96+ (segmented_generate_dispatch)(traits::local (first), traits::end (sfirst), boost::move ( gen) , is_local_seg_t (), local_cat_t ());
9597
9698 for (++sfirst; sfirst != slast; ++sfirst)
97- (segmented_generate_dispatch)(traits::begin (sfirst), traits::end (sfirst), gen, is_local_seg_t (), local_cat_t ());
99+ (segmented_generate_dispatch)(traits::begin (sfirst), traits::end (sfirst), boost::move ( gen) , is_local_seg_t (), local_cat_t ());
98100
99- (segmented_generate_dispatch)(traits::begin (sfirst), traits::local (last), gen, is_local_seg_t (), local_cat_t ());
101+ (segmented_generate_dispatch)(traits::begin (sfirst), traits::local (last), boost::move ( gen) , is_local_seg_t (), local_cat_t ());
100102 }
101103}
102104
@@ -111,7 +113,7 @@ void segmented_generate(FwdIt first, Sent last, Generator gen)
111113{
112114 typedef segmented_iterator_traits<FwdIt> traits;
113115 detail_algo::segmented_generate_dispatch
114- (first, last, gen, typename traits::is_segmented_iterator (), typename iterator_traits<FwdIt>::iterator_category ());
116+ (first, last, boost::move ( gen) , typename traits::is_segmented_iterator (), typename iterator_traits<FwdIt>::iterator_category ());
115117}
116118
117119} // namespace container
0 commit comments