23#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0)
24#include "Qt5Promise.h"
29#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0)
47template <
typename Arg,
typename... Args>
48struct ArgsType<Arg, Args...>
51 using PromiseType = void;
52 using IsPromise = std::false_type;
53 static const bool HasExtraArgs = (
sizeof...(Args) > 0);
55 template <
class Class,
class Callable>
56 static const bool CanInvokeWithArgs =
57 std::is_invocable_v<Callable, Class, Arg, Args...>;
60template <
typename Arg,
typename... Args>
61struct ArgsType<
QPromise<Arg> &, Args...>
64 using PromiseType = Arg;
65 using IsPromise = std::true_type;
66 static const bool HasExtraArgs = (
sizeof...(Args) > 0);
68 template <
class Class,
class Callable>
69 static const bool CanInvokeWithArgs =
70 std::is_invocable_v<Callable, Class, QPromise<Arg> &, Args...>;
77 using PromiseType = void;
78 using IsPromise = std::false_type;
79 static const bool HasExtraArgs =
false;
82 template <
class Class,
class Callable>
83 static const bool CanInvokeWithArgs = std::is_invocable_v<Callable, Class>;
87struct ArgResolver : ArgResolver<decltype(&std::decay_t<F>::operator())>
91struct ArgResolver<std::reference_wrapper<F>> :
92 ArgResolver<decltype(&std::decay_t<F>::operator())>
95template <
typename R,
typename... Args>
96struct ArgResolver<R(Args...)> :
public ArgsType<Args...>
99template <
typename R,
typename... Args>
100struct ArgResolver<R (*)(Args...)> :
public ArgsType<Args...>
103template <
typename R,
typename... Args>
104struct ArgResolver<R (*&)(Args...)> :
public ArgsType<Args...>
107template <
typename R,
typename... Args>
108struct ArgResolver<R (*
const)(Args...)> :
public ArgsType<Args...>
111template <
typename R,
typename... Args>
112struct ArgResolver<R (&)(Args...)> :
public ArgsType<Args...>
115template <
typename Class,
typename R,
typename... Args>
116struct ArgResolver<R (Class::*)(Args...)> :
public ArgsType<Args...>
119template <
typename Class,
typename R,
typename... Args>
120struct ArgResolver<R (Class::*)(Args...) noexcept> :
public ArgsType<Args...>
123template <
typename Class,
typename R,
typename... Args>
124struct ArgResolver<R (Class::*)(Args...) const> :
public ArgsType<Args...>
127template <
typename Class,
typename R,
typename... Args>
128struct ArgResolver<R (Class::*)(Args...) const noexcept> :
129 public ArgsType<Args...>
132template <
typename Class,
typename R,
typename... Args>
133struct ArgResolver<R (Class::*const)(Args...) const> :
public ArgsType<Args...>
136template <
typename Class,
typename R,
typename... Args>
137struct ArgResolver<R (Class::*const)(Args...) const noexcept> :
138 public ArgsType<Args...>
144namespace quentier::threading::detail {
146template <
typename F,
typename Arg,
typename Enable =
void>
151template <
typename F,
typename Arg>
155 !std::is_invocable_v<std::decay_t<F>, QFuture<Arg>>>>
157 using ResultType = std::invoke_result_t<std::decay_t<F>, std::decay_t<Arg>>;
161template <
class F,
class Arg>
165 std::is_invocable_v<std::decay_t<F>, QFuture<Arg>>>>
167 using ResultType = std::invoke_result_t<std::decay_t<F>,
QFuture<Arg>>;
175 std::is_invocable_v<std::decay_t<F>, QFuture<void>>>>
177 using ResultType = std::invoke_result_t<std::decay_t<F>,
QFuture<void>>;
185 !std::is_invocable_v<std::decay_t<F>, QFuture<void>>>>
187 using ResultType = std::invoke_result_t<std::decay_t<F>>;
Definition Qt5Promise.h:28
The Result template class represents the bare bones result monad implementation which either contains...
Definition Result.h:38
Definition QtFutureHelpers.h:148