Missing Future/SemiFuture->Value conversion check
[folly.git] / folly / futures / Future.h
index 5cd5436d0d049cf8c7e37e0ff5181317d271ab03..e6fc8ebeeacaa3102d994151fcda212c4e6efda3 100644 (file)
@@ -209,7 +209,8 @@ class SemiFuture : private futures::detail::FutureBase<T> {
   template <
       class T2 = T,
       typename = typename std::enable_if<
-          !isFuture<typename std::decay<T2>::type>::value>::type>
+          !isFuture<typename std::decay<T2>::type>::value &&
+          !isSemiFuture<typename std::decay<T2>::type>::value>::type>
   /* implicit */ SemiFuture(T2&& val) : Base(std::forward<T2>(val)) {}
 
   template <class T2 = T>
@@ -343,7 +344,8 @@ class Future : private futures::detail::FutureBase<T> {
   template <
       class T2 = T,
       typename = typename std::enable_if<
-          !isFuture<typename std::decay<T2>::type>::value>::type>
+          !isFuture<typename std::decay<T2>::type>::value &&
+          !isSemiFuture<typename std::decay<T2>::type>::value>::type>
   /* implicit */ Future(T2&& val) : Base(std::forward<T2>(val)) {}
 
   template <class T2 = T>