X-Git-Url: http://bilbo.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/b8df87e176f27b25534f27d7e240defa32ca35bc..8b853cf697928f829717bb60bd9c1cadaf2beb8e:/include/simgrid/kernel/future.hpp diff --git a/include/simgrid/kernel/future.hpp b/include/simgrid/kernel/future.hpp index 30f7f51b1d..374d0ee650 100644 --- a/include/simgrid/kernel/future.hpp +++ b/include/simgrid/kernel/future.hpp @@ -157,7 +157,7 @@ public: xbt_assert(this->value_); auto result = std::move(this->value_.get()); this->value_ = boost::optional(); - return std::move(result); + return result; } private: @@ -204,11 +204,11 @@ public: } }; -template void bind_promise(Promise promise, Future future) +template void bind_promise(Promise&& promise, Future future) { class PromiseBinder { public: - explicit PromiseBinder(Promise promise) : promise_(std::move(promise)) {} + explicit PromiseBinder(Promise&& promise) : promise_(std::move(promise)) {} void operator()(Future future) { simgrid::xbt::set_promise(promise_, future); } private: @@ -291,6 +291,7 @@ class Future { public: Future() = default; explicit Future(std::shared_ptr> state) : state_(std::move(state)) {} + ~Future() = default; // Move type: Future(Future&) = delete; @@ -356,7 +357,7 @@ public: [](Promise promise, std::shared_ptr> state, F continuation) { // ...set the new future value by running the continuation. Future 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; @@ -425,7 +426,7 @@ template Future unwrap_future(Future> future) Promise promise; Future 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 @@ -440,7 +441,7 @@ template Future unwrap_future(Future> future) * auto promise = std::make_shared>(); * auto future = promise->get_future(); * - * SIMIX_timer_set(date, [promise] { + * simgrid::simix::Timer::set(date, [promise] { * try { * int value = compute_the_value(); * if (value < 0)