16template <
typename...
Args>
19template <
typename Func,
typename...
Arg>
22template <
typename Func,
typename...
Arg>
73template <
bool Condition,
typename T>
76 return std::move(std::forward<T>(
arg));
78 return std::forward<T>(
arg);
84 static_assert(!std::is_reference_v<T>,
"T cannot be V&, just use pointer or std::reference_wrapper");
85 static_assert(!std::is_const_v<T>,
"T cannot be const, because it's unnecessary");
86 static_assert(!std::is_volatile_v<T>,
"T cannot be volatile, because it's unnecessary");
87 static_assert(!
is_result_v<T>,
"T cannot be Result, because it's ambiguous");
89 static_assert(!
is_task_v<T>,
"T cannot be Task, because it's ambiguous");
90 static_assert(!std::is_same_v<T, std::exception_ptr>,
"T cannot be std::exception_ptr, because it's ambiguous");
91 static_assert(!std::is_same_v<T, Unit>,
"T cannot be Unit, because Unit for internal instead of void usage");
constexpr bool is_waitable_v
typename detail::FutureBaseTypes< T >::Value future_base_value_t
typename detail::SharedFutureTypes< T >::Error shared_future_error_t
constexpr bool is_shared_future_v
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
typename detail::SharedFutureTypes< T >::Value shared_future_value_t
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.
std::remove_cv_t< std::remove_reference_t< T > > remove_cvref_t
typename detail::Invoke< Func, Arg... >::Type invoke_t
constexpr bool is_waitable_with_timeout_v
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