Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Add explicit keyword to simgrid::kernel::Future constructor.
[simgrid.git] / include / simgrid / kernel / future.hpp
index da5bd08..d1ec120 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (c) 2016. The SimGrid Team.
+/* Copyright (c) 2016-2017. The SimGrid Team.
  * All rights reserved.                                                     */
 
 /* This program is free software; you can redistribute it and/or modify it
@@ -61,7 +61,7 @@ public:
 
   void set_continuation(simgrid::xbt::Task<void()>&& continuation)
   {
-    xbt_assert(!continuation_);
+    xbt_assert(not continuation_);
     switch (status_) {
     case FutureStatus::done:
       // This is not supposed to happen if continuation is set
@@ -181,7 +181,7 @@ public:
     xbt_assert(this->value_);
     T* result = value_;
     value_ = nullptr;
-    return *value_;
+    return *result;
   }
 
 private:
@@ -207,7 +207,7 @@ public:
 template<class T>
 void bindPromise(Promise<T> promise, Future<T> future)
 {
-  struct PromiseBinder {
+  class PromiseBinder {
   public:
     PromiseBinder(Promise<T> promise) : promise_(std::move(promise)) {}
     void operator()(Future<T> future)
@@ -282,7 +282,7 @@ template<class T>
 class Future {
 public:
   Future() = default;
-  Future(std::shared_ptr<FutureState<T>> state): state_(std::move(state)) {}
+  explicit Future(std::shared_ptr<FutureState<T>> state) : state_(std::move(state)) {}
 
   // Move type:
   Future(Future&) = delete;
@@ -369,12 +369,9 @@ public:
    *                     the future is ready
    * @exception std::future_error no state is associated with the future
    */
-  template<class F>
-  auto then(F continuation)
-  -> typename std::enable_if<
-       !is_future<decltype(continuation(std::move(*this)))>::value,
-       Future<decltype(continuation(std::move(*this)))>
-     >::type
+  template <class F>
+  auto then(F continuation) -> typename std::enable_if<not is_future<decltype(continuation(std::move(*this)))>::value,
+                                                       Future<decltype(continuation(std::move(*this)))>>::type
   {
     return this->thenNoUnwrap(std::move(continuation));
   }
@@ -458,7 +455,7 @@ template<class T>
 class Promise {
 public:
   Promise() : state_(std::make_shared<FutureState<T>>()) {}
-  Promise(std::shared_ptr<FutureState<T>> state) : state_(std::move(state)) {}
+  explicit Promise(std::shared_ptr<FutureState<T>> state) : state_(std::move(state)) {}
 
   // Move type
   Promise(Promise const&) = delete;
@@ -513,7 +510,7 @@ template<>
 class Promise<void> {
 public:
   Promise() : state_(std::make_shared<FutureState<void>>()) {}
-  Promise(std::shared_ptr<FutureState<void>> state) : state_(std::move(state)) {}
+  explicit Promise(std::shared_ptr<FutureState<void>> state) : state_(std::move(state)) {}
   ~Promise()
   {
     if (state_ && state_->get_status() == FutureStatus::not_ready)