From b14291581fb2a515c3e195f0b6f44dd1a0307996 Mon Sep 17 00:00:00 2001 From: Andrey Tuganov Date: Mon, 20 Nov 2017 17:56:01 -0500 Subject: [PATCH] Fix move semantics in iterator make_range --- source/opt/iterator.h | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/source/opt/iterator.h b/source/opt/iterator.h index d2247f4..52a8d86 100644 --- a/source/opt/iterator.h +++ b/source/opt/iterator.h @@ -108,7 +108,10 @@ class UptrVectorIterator template class IteratorRange { public: - IteratorRange(IteratorType b, IteratorType e) : begin_(b), end_(e) {} + IteratorRange(const IteratorType& b, const IteratorType& e) + : begin_(b), end_(e) {} + IteratorRange(IteratorType&& b, IteratorType&& e) + : begin_(std::move(b)), end_(std::move(e)) {} IteratorType begin() const { return begin_; } IteratorType end() const { return end_; } @@ -124,8 +127,8 @@ class IteratorRange { // Returns a (begin, end) iterator pair for the given iterators. // The iterators must belong to the same container. template -inline IteratorRange make_range(IteratorType& begin, - IteratorType& end) { +inline IteratorRange make_range(const IteratorType& begin, + const IteratorType& end) { return {begin, end}; } @@ -134,7 +137,7 @@ inline IteratorRange make_range(IteratorType& begin, template inline IteratorRange make_range(IteratorType&& begin, IteratorType&& end) { - return {begin, end}; + return {std::move(begin), std::move(end)}; } // Returns a (begin, end) iterator pair for the given container. -- 2.7.4