Commit 514d9cb9 authored by Lee Howes's avatar Lee Howes Committed by Facebook Github Bot

Missing Future/SemiFuture->Value conversion check

Summary: Conversion check was lost in an earlier refactor. This meant that SemiFuture could be accidentally converted to Future through the value constructor. This should be disabled.

Reviewed By: yfeldblum

Differential Revision: D6214526

fbshipit-source-id: 3fc2d026ec6062b38b9500c8adf3eee12c0f2693
parent 61ba3c11
......@@ -35,11 +35,6 @@ struct isSemiFuture<SemiFuture<T>> : std::true_type {
typedef T Inner;
};
template <typename T>
struct isSemiFuture<Future<T>> : std::true_type {
typedef T Inner;
};
template <typename T>
struct isFuture : std::false_type {
using Inner = typename Unit::Lift<T>::type;
......
......@@ -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>
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment