Do not construct a Future<T> from a Future<Something> value
[folly.git] / folly / futures / Future.h
index 3111fbf97806939dc076af118e3e56eb4ab7ca13..06572c6306fc4818bfbfd5ff5966af8d5667b2c2 100644 (file)
@@ -56,10 +56,14 @@ class Future {
 
   /// Construct a Future from a value (perfect forwarding)
   /* implicit */
-  template <class T2 = T> Future(T2&& val);
-
-  template <class F = T,
-            typename std::enable_if<std::is_void<F>::value, int>::type = 0>
+  template <class T2 = T,
+            typename std::enable_if<!isFuture<T2>::value, void*>::type = nullptr>
+  Future(T2&& val);
+
+  template <class T2 = T,
+            typename std::enable_if<
+              folly::is_void_or_unit<T2>::value,
+              int>::type = 0>
   Future();
 
   ~Future();