From: Hans Fugal <fugalh@fb.com> Date: Thu, 30 Apr 2015 22:09:05 +0000 (-0700) Subject: Do not construct a Future<T> from a Future<Something> value X-Git-Tag: v0.38.0~26 X-Git-Url: http://demsky.eecs.uci.edu/git/?a=commitdiff_plain;h=5b531cbb45884ad8a27891cf3170cd0286c3183c;p=folly.git Do not construct a Future<T> from a Future<Something> value Summary: The value constructor can be nice. But when it matches on Future<Something> it just confuses everybody. Test Plan: building and running tests contbuild Reviewed By: jsedgwick@fb.com Subscribers: exa, folly-diffs@, jsedgwick, yfeldblum, chalfant FB internal diff: D2036455 Tasks: 6925951 Signature: t1:2036455:1430423503:73906f748318c4ebec13f45ad3761f104e2ef888 --- diff --git a/folly/futures/Future-inl.h b/folly/futures/Future-inl.h index f6abe7b4..927a3142 100644 --- a/folly/futures/Future-inl.h +++ b/folly/futures/Future-inl.h @@ -44,7 +44,8 @@ Future<T>& Future<T>::operator=(Future<T>&& other) noexcept { } template <class T> -template <class T2> +template <class T2, + typename std::enable_if<!isFuture<T2>::value, void*>::type> Future<T>::Future(T2&& val) : core_(nullptr) { Promise<T> p; p.setValue(std::forward<T2>(val)); diff --git a/folly/futures/Future.h b/folly/futures/Future.h index cc0bd36a..06572c63 100644 --- a/folly/futures/Future.h +++ b/folly/futures/Future.h @@ -56,7 +56,9 @@ class Future { /// Construct a Future from a value (perfect forwarding) /* implicit */ - template <class T2 = T> Future(T2&& val); + 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<