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;
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>
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>