Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
IIUC return std::move(...) is discouraged.
[simgrid.git] / include / simgrid / kernel / future.hpp
index 10ec3e0..374d0ee 100644 (file)
@@ -157,7 +157,7 @@ public:
     xbt_assert(this->value_);
     auto result = std::move(this->value_.get());
     this->value_ = boost::optional<T>();
-    return std::move(result);
+    return result;
   }
 
 private:
@@ -204,11 +204,11 @@ public:
   }
 };
 
-template <class T> void bind_promise(Promise<T> promise, Future<T> future)
+template <class T> void bind_promise(Promise<T>&& promise, Future<T> future)
 {
   class PromiseBinder {
   public:
-    explicit PromiseBinder(Promise<T> promise) : promise_(std::move(promise)) {}
+    explicit PromiseBinder(Promise<T>&& promise) : promise_(std::move(promise)) {}
     void operator()(Future<T> future) { simgrid::xbt::set_promise(promise_, future); }
 
   private:
@@ -357,7 +357,7 @@ public:
         [](Promise<R> promise, std::shared_ptr<FutureState<T>> state, F continuation) {
           // ...set the new future value by running the continuation.
           Future<T> future(std::move(state));
-          simgrid::xbt::fulfill_promise(promise, [&] { return continuation(std::move(future)); });
+          simgrid::xbt::fulfill_promise(promise, [&continuation, &future] { return continuation(std::move(future)); });
         },
         std::move(promise), state, std::move(continuation)));
     return future;
@@ -426,7 +426,7 @@ template <class T> Future<T> unwrap_future(Future<Future<T>> future)
   Promise<T> promise;
   Future<T> result = promise.get_future();
   bind_promise(std::move(promise), std::move(future));
-  return std::move(result);
+  return result;
 }
 
 /** Producer side of a @ref simgrid::kernel::Future