#pragma once
namespace folly {
template <class>
class Promise;
template <class T>
class SemiFuture;
template <typename T>
struct isSemiFuture : std::false_type { … };
isSemiFuture<SemiFuture<T>>;
template <typename T>
struct isFuture : std::false_type { … };
isFuture<Future<T>>;
template <typename T>
struct isFutureOrSemiFuture : std::false_type { … };
isFutureOrSemiFuture<Try<T>>;
isFutureOrSemiFuture<Future<T>>;
isFutureOrSemiFuture<Future<Try<T>>>;
isFutureOrSemiFuture<SemiFuture<T>>;
isFutureOrSemiFuture<SemiFuture<Try<T>>>;
namespace futures {
namespace detail {
template <typename...>
struct ArgType;
ArgType<Arg, Args...>;
template <>
struct ArgType<> { … };
template <bool isTry_, typename F, typename... Args>
struct argResult { … };
template <typename T, typename F>
struct tryCallableResult { … };
template <typename T, typename F>
struct tryExecutorCallableResult { … };
template <typename T, typename F>
struct valueCallableResult { … };
template <typename T, typename F>
struct valueExecutorCallableResult { … };
class DeferredExecutor;
}
}
class Timekeeper;
}