12template <
typename...
Args>
15template <
typename Func,
typename...
Arg>
18template <
typename Func,
typename...
Arg>
49template <
bool Condition,
typename T>
52 return std::move(std::forward<T>(
arg));
54 return std::forward<T>(
arg);
60 static_assert(!std::is_reference_v<T>,
"T cannot be V&, just use pointer or std::reference_wrapper");
61 static_assert(!std::is_const_v<T>,
"T cannot be const, because it's unnecessary");
62 static_assert(!std::is_volatile_v<T>,
"T cannot be volatile, because it's unnecessary");
63 static_assert(!
is_result_v<T>,
"T cannot be Result, because it's ambiguous");
65 static_assert(!
is_task_v<T>,
"T cannot be Task, because it's ambiguous");
66 static_assert(!std::is_same_v<T, std::exception_ptr>,
"T cannot be std::exception_ptr, because it's ambiguous");
67 static_assert(!std::is_same_v<T, Unit>,
"T cannot be Unit, because Unit for internal instead of void usage");
typename detail::FutureBaseTypes< T >::Value future_base_value_t
typename detail::InstantiationTypes< Task, T >::Error task_error_t
typename detail::Head< Args... >::Type head_t
constexpr bool is_result_v
constexpr bool is_invocable_v
decltype(auto) move_if(T &&arg) noexcept
constexpr bool is_future_base_v
typename detail::FutureBaseTypes< T >::Error future_base_error_t
constexpr bool Check() noexcept
Contract< V, E > MakeContract()
Creates related future and promise.
typename detail::Invoke< Func, Arg... >::Type invoke_t
typename detail::InstantiationTypes< Task, T >::Value task_value_t
typename detail::InstantiationTypes< Result, T >::Value result_value_t
typename detail::InstantiationTypes< Result, T >::Error result_error_t