X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/b4a181fd483b02d5a22083ade79906ffc4f25d40..e44a0d71a8bacd7ab03e284fc32ad23731f5869c:/include/simgrid/kernel/future.hpp diff --git a/include/simgrid/kernel/future.hpp b/include/simgrid/kernel/future.hpp index 7d94a97364..581db40333 100644 --- a/include/simgrid/kernel/future.hpp +++ b/include/simgrid/kernel/future.hpp @@ -61,7 +61,7 @@ public: void set_continuation(simgrid::xbt::Task&& continuation) { - xbt_assert(!continuation_); + xbt_assert(not continuation_); switch (status_) { case FutureStatus::done: // This is not supposed to happen if continuation is set @@ -121,6 +121,7 @@ protected: status_ = FutureStatus::done; if (exception_) { std::exception_ptr exception = std::move(exception_); + exception_ = nullptr; std::rethrow_exception(std::move(exception)); } } @@ -208,7 +209,7 @@ void bindPromise(Promise promise, Future future) { struct PromiseBinder { public: - PromiseBinder(Promise promise) : promise_(std::move(promise)) {} + explicit PromiseBinder(Promise promise) : promise_(std::move(promise)) {} void operator()(Future future) { simgrid::xbt::setPromise(promise_, future); @@ -281,7 +282,7 @@ template class Future { public: Future() = default; - Future(std::shared_ptr> state): state_(std::move(state)) {} + explicit Future(std::shared_ptr> state) : state_(std::move(state)) {} // Move type: Future(Future&) = delete; @@ -368,12 +369,9 @@ public: * the future is ready * @exception std::future_error no state is associated with the future */ - template - auto then(F continuation) - -> typename std::enable_if< - !is_future::value, - Future - >::type + template + auto then(F continuation) -> typename std::enable_if::value, + Future>::type { return this->thenNoUnwrap(std::move(continuation)); } @@ -390,8 +388,6 @@ public: } /** Get the value from the future - * - * This is expected to be called * * The future must be valid and ready in order to make this call. * @ref std::future blocks when the future is not ready but we are @@ -423,7 +419,7 @@ Future unwrapFuture(Future> future) return std::move(result); } -/** Producer side of a @simgrid::kernel::Future +/** Producer side of a @ref simgrid::kernel::Future * * A @ref Promise is connected to some `Future` and can be used to * set its result. @@ -458,8 +454,8 @@ Future unwrapFuture(Future> future) template class Promise { public: - Promise() : state_(std::make_shared>()) {} - Promise(std::shared_ptr> state) : state_(std::move(state)) {} + explicit Promise() : state_(std::make_shared>()) {} + explicit Promise(std::shared_ptr> state) : state_(std::move(state)) {} // Move type Promise(Promise const&) = delete;