33
44#include < iterbase.hpp>
55
6-
76#include < utility>
87
98namespace iter {
@@ -13,7 +12,7 @@ namespace iter {
1312 class Compressed ;
1413
1514 template <typename Container, typename Selector>
16- Compressed<Container, Selector> compress (Container &, Selector &);
15+ Compressed<Container, Selector> compress (Container && , Selector & &);
1716
1817
1918 template <typename Container, typename Selector>
@@ -25,7 +24,7 @@ namespace iter {
2524 // The only thing allowed to directly instantiate an Compressed is
2625 // the compress function
2726 friend Compressed compress<Container, Selector>(
28- Container &, Selector &);
27+ Container && , Selector & &);
2928
3029 using typename IterBase<Container>::contained_iter_type;
3130
@@ -35,7 +34,7 @@ namespace iter {
3534 using selector_iter_type = decltype (std::begin(selectors));
3635
3736 // Value constructor for use only in the compress function
38- Compressed (Container & container, Selector & selectors) :
37+ Compressed (Container && container, Selector & & selectors) :
3938 container(container),
4039 selectors(selectors)
4140 { }
@@ -111,8 +110,10 @@ namespace iter {
111110 // Helper function to instantiate an Compressed
112111 template <typename Container, typename Selector>
113112 Compressed<Container, Selector> compress (
114- Container & container, Selector & selectors) {
115- return Compressed<Container, Selector>(container, selectors);
113+ Container && container, Selector && selectors) {
114+ return Compressed<Container, Selector>(
115+ std::forward<Container>(container),
116+ std::forward<Selector>(selectors));
116117 }
117118
118119}
0 commit comments