diff --git a/include/boost/iterator/filter_iterator.hpp b/include/boost/iterator/filter_iterator.hpp index b87c02b..a03f653 100644 --- a/include/boost/iterator/filter_iterator.hpp +++ b/include/boost/iterator/filter_iterator.hpp @@ -12,6 +12,14 @@ #include #include +#include + +#ifndef BOOST_NO_CXX11_RVALUE_REFERENCES +#include +#define BOOST_ITERATOR_DETAIL_MOVE(x) std::move(x) +#else +#define BOOST_ITERATOR_DETAIL_MOVE(x) x +#endif namespace boost { namespace iterators { @@ -54,13 +62,13 @@ namespace iterators { filter_iterator() { } filter_iterator(Predicate f, Iterator x, Iterator end_ = Iterator()) - : super_t(x), m_predicate(f), m_end(end_) + : super_t(BOOST_ITERATOR_DETAIL_MOVE(x)), m_predicate(BOOST_ITERATOR_DETAIL_MOVE(f)), m_end(BOOST_ITERATOR_DETAIL_MOVE(end_)) { satisfy_predicate(); } filter_iterator(Iterator x, Iterator end_ = Iterator()) - : super_t(x), m_predicate(), m_end(end_) + : super_t(BOOST_ITERATOR_DETAIL_MOVE(x)), m_predicate(), m_end(BOOST_ITERATOR_DETAIL_MOVE(end_)) { // Pro8 is a little too aggressive about instantiating the // body of this function. @@ -111,7 +119,7 @@ namespace iterators { inline filter_iterator make_filter_iterator(Predicate f, Iterator x, Iterator end = Iterator()) { - return filter_iterator(f,x,end); + return filter_iterator(BOOST_ITERATOR_DETAIL_MOVE(f),BOOST_ITERATOR_DETAIL_MOVE(x),BOOST_ITERATOR_DETAIL_MOVE(end)); } template @@ -123,7 +131,7 @@ namespace iterators { >::type x , Iterator end = Iterator()) { - return filter_iterator(x,end); + return filter_iterator(BOOST_ITERATOR_DETAIL_MOVE(x),BOOST_ITERATOR_DETAIL_MOVE(end)); } } // namespace iterators @@ -133,4 +141,6 @@ using iterators::make_filter_iterator; } // namespace boost +#undef BOOST_ITERATOR_DETAIL_MOVE + #endif // BOOST_FILTER_ITERATOR_23022003THW_HPP