From: James Sedgwick <jsedgwick@fb.com>
Date: Thu, 8 Jan 2015 16:42:04 +0000 (-0800)
Subject: stop returning move(...) when unnecessary
X-Git-Tag: v0.22.0~19
X-Git-Url: http://demsky.eecs.uci.edu/git/?a=commitdiff_plain;h=0b215436b803dc4cf8e4521791cb67aff401e546;p=folly.git

stop returning move(...) when unnecessary

Summary: as discussed in another diff, this might help with NRVO

Test Plan: unit

Reviewed By: hans@fb.com

Subscribers: trunkagent, fugalh, folly-diffs@

FB internal diff: D1764921

Signature: t1:1764921:1420677311:c6b63d7bf04c0e17283117b3edef798c288e5fbb
---

diff --git a/folly/wangle/futures/Future-inl.h b/folly/wangle/futures/Future-inl.h
index 31cca9e5..66cadbcf 100644
--- a/folly/wangle/futures/Future-inl.h
+++ b/folly/wangle/futures/Future-inl.h
@@ -135,7 +135,7 @@ Future<T>::then(F&& func) {
       });
     });
 
-  return std::move(f);
+  return f;
 }
 
 // Variant: f.then([](T&& t){ return t; });
@@ -167,7 +167,7 @@ Future<T>::then(F&& func) {
       }
     });
 
-  return std::move(f);
+  return f;
 }
 
 // Variant: f.then([](){ return; });
@@ -197,7 +197,7 @@ Future<T>::then(F&& func) {
       }
     });
 
-  return std::move(f);
+  return f;
 }
 
 // Variant: f.then([](Try<T>&& t){ return makeFuture<T>(t.value()); });
@@ -233,7 +233,7 @@ Future<T>::then(F&& func) {
       }
     });
 
-  return std::move(f);
+  return f;
 }
 
 // Variant: f.then([](T&& t){ return makeFuture<T>(t); });
@@ -272,7 +272,7 @@ Future<T>::then(F&& func) {
       }
     });
 
-  return std::move(f);
+  return f;
 }
 
 // Variant: f.then([](){ return makeFuture(); });
@@ -310,7 +310,7 @@ Future<T>::then(F&& func) {
       }
     });
 
-  return std::move(f);
+  return f;
 }
 
 template <class T>
@@ -442,17 +442,15 @@ void Future<T>::raise(exception_wrapper exception) {
 template <class T>
 Future<typename std::decay<T>::type> makeFuture(T&& t) {
   Promise<typename std::decay<T>::type> p;
-  auto f = p.getFuture();
   p.setValue(std::forward<T>(t));
-  return std::move(f);
+  return p.getFuture();
 }
 
 inline // for multiple translation units
 Future<void> makeFuture() {
   Promise<void> p;
-  auto f = p.getFuture();
   p.setValue();
-  return std::move(f);
+  return p.getFuture();
 }
 
 template <class F>
@@ -461,12 +459,11 @@ auto makeFutureTry(
     typename std::enable_if<!std::is_reference<F>::value, bool>::type sdf)
     -> Future<decltype(func())> {
   Promise<decltype(func())> p;
-  auto f = p.getFuture();
   p.fulfil(
     [&func]() {
       return (func)();
     });
-  return std::move(f);
+  return p.getFuture();
 }
 
 template <class F>
@@ -478,9 +475,8 @@ auto makeFutureTry(F const& func) -> Future<decltype(func())> {
 template <class T>
 Future<T> makeFuture(std::exception_ptr const& e) {
   Promise<T> p;
-  auto f = p.getFuture();
   p.setException(e);
-  return std::move(f);
+  return p.getFuture();
 }
 
 template <class T>
@@ -495,9 +491,8 @@ typename std::enable_if<std::is_base_of<std::exception, E>::value,
                         Future<T>>::type
 makeFuture(E const& e) {
   Promise<T> p;
-  auto f = p.getFuture();
   p.setException(make_exception_wrapper<E>(e));
-  return std::move(f);
+  return p.getFuture();
 }
 
 template <class T>
@@ -537,7 +532,7 @@ whenAll(Fs&&... fs)
   auto f_saved = ctx->p.getFuture();
   detail::whenAllVariadicHelper(ctx,
     std::forward<typename std::decay<Fs>::type>(fs)...);
-  return std::move(f_saved);
+  return f_saved;
 }
 
 // when (iterator)
@@ -574,7 +569,7 @@ whenAll(InputIterator first, InputIterator last)
        });
   }
 
-  return std::move(f_saved);
+  return f_saved;
 }
 
 template <class InputIterator>
@@ -600,7 +595,7 @@ whenAny(InputIterator first, InputIterator last) {
     });
   }
 
-  return std::move(f_saved);
+  return f_saved;
 }
 
 template <class InputIterator>