/* * Copyright (c) Facebook, Inc. and its affiliates. * * This software may be used and distributed according to the terms of the * GNU General Public License version 2. */ #pragma once #include #include namespace facebook::eden { template class ImmediateFuture; namespace detail { template struct isImmediateFuture : std::false_type {}; template struct isImmediateFuture> : std::true_type {}; template struct continuation_result_impl { using type = T; }; template struct continuation_result_impl< T, typename std::enable_if_t::value>> { using type = typename T::value_type; }; template struct continuation_result_impl< T, typename std::enable_if_t::value>> { using type = typename T::value_type; }; template struct continuation_result_impl< T, typename std::enable_if_t::value>> { using type = typename T::element_type; }; template <> struct continuation_result_impl { using type = folly::Unit; }; template < typename Func, typename Arg, typename enabled = std::enable_if_t>> struct continuation_result : continuation_result_impl> {}; /** * Returns the actual return type of a continuation callback, removing the * Future/Try/ImmediateFuture wrapping. */ template using continuation_result_t = typename continuation_result::type; } // namespace detail } // namespace facebook::eden