From 3a1ea741f1d371aedc7fd57a5ad783f51fb1018b Mon Sep 17 00:00:00 2001 From: q66 Date: Thu, 25 Jun 2015 18:59:26 +0100 Subject: [PATCH] do not move-on-return in order to allow copy elision --- octa/range.h | 8 ++++---- octa/string.h | 28 ++++++++++++++-------------- 2 files changed, 18 insertions(+), 18 deletions(-) diff --git a/octa/range.h b/octa/range.h index a7a183c..cdbc54b 100644 --- a/octa/range.h +++ b/octa/range.h @@ -319,7 +319,7 @@ public: RangeHalf operator++(int) { RangeHalf tmp(*this); next(); - return octa::move(tmp); + return tmp; } RangeHalf &operator--() { @@ -329,18 +329,18 @@ public: RangeHalf operator--(int) { RangeHalf tmp(*this); prev(); - return octa::move(tmp); + return tmp; } RangeHalf operator+(RangeDifference n) const { RangeHalf tmp(*this); tmp.add_n(n); - return octa::move(tmp); + return tmp; } RangeHalf operator-(RangeDifference n) const { RangeHalf tmp(*this); tmp.sub_n(n); - return octa::move(tmp); + return tmp; } RangeHalf &operator+=(RangeDifference n) { diff --git a/octa/string.h b/octa/string.h index 5dc361d..ac72a05 100644 --- a/octa/string.h +++ b/octa/string.h @@ -360,28 +360,28 @@ template String concat(const T &v, const String &sep, F func) { String ret; auto range = octa::each(v); - if (range.empty()) return octa::move(ret); + if (range.empty()) return ret; for (;;) { ret += func(range.front()); range.pop_front(); if (range.empty()) break; ret += sep; } - return octa::move(ret); + return ret; } template String concat(const T &v, const String &sep = " ") { String ret; auto range = octa::each(v); - if (range.empty()) return octa::move(ret); + if (range.empty()) return ret; for (;;) { ret += range.front(); range.pop_front(); if (range.empty()) break; ret += sep; } - return octa::move(ret); + return ret; } template @@ -425,7 +425,7 @@ template struct ToString { decltype(octa::each(v)) >>()); ret += "}"; - return octa::move(ret); + return ret; } template @@ -437,9 +437,9 @@ template struct ToString { } String operator()(const T &v) const { - return octa::move(to_str - >>(v)); + >>(v); } }; @@ -476,7 +476,7 @@ template<> struct ToString { String operator()(char c) { String ret; ret.push(c); - return octa::move(ret); + return ret; } }; @@ -487,7 +487,7 @@ template<> struct ToString { \ String operator()(T v) { \ String ret; \ octa::detail::str_printf((octa::Vector *)&ret, fmt, v); \ - return octa::move(ret); \ + return ret; \ } \ }; @@ -511,7 +511,7 @@ template struct ToString { String operator()(Argument v) { String ret; octa::detail::str_printf((octa::Vector *)&ret, "%p", v); - return octa::move(ret); + return ret; } }; @@ -542,19 +542,19 @@ template struct ToString> { ret += ToString>>() (v.second); ret += "}"; - return octa::move(ret); + return ret; } }; template String to_string(const T &v) { - return octa::move(ToString>> - ()(v)); + return ToString>> + ()(v); } template String to_string(std::initializer_list init) { - return octa::move(ToString>()(init)); + return ToString>()(init); } } /* namespace octa */