23 #if QT_VERSION < QT_VERSION_CHECK(6, 0, 0) 24 #include "Qt5Promise.h" 27 #include <type_traits> 29 #if QT_VERSION < QT_VERSION_CHECK(6, 0, 0) 44 template <
typename...>
47 template <
typename Arg,
typename... Args>
48 struct 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...>;
60 template <
typename Arg,
typename... Args>
61 struct 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>;
87 struct ArgResolver : ArgResolver<decltype(&std::decay_t<F>::operator())>
91 struct ArgResolver<std::reference_wrapper<F>> :
92 ArgResolver<decltype(&std::decay_t<F>::operator())>
95 template <
typename R,
typename... Args>
96 struct ArgResolver<R(Args...)> :
public ArgsType<Args...>
99 template <
typename R,
typename... Args>
100 struct ArgResolver<R (*)(Args...)> :
public ArgsType<Args...>
103 template <
typename R,
typename... Args>
104 struct ArgResolver<R (*&)(Args...)> :
public ArgsType<Args...>
107 template <
typename R,
typename... Args>
108 struct ArgResolver<R (*
const)(Args...)> :
public ArgsType<Args...>
111 template <
typename R,
typename... Args>
112 struct ArgResolver<R (&)(Args...)> :
public ArgsType<Args...>
115 template <
typename Class,
typename R,
typename... Args>
116 struct ArgResolver<R (Class::*)(Args...)> :
public ArgsType<Args...>
119 template <
typename Class,
typename R,
typename... Args>
120 struct ArgResolver<R (Class::*)(Args...) noexcept> :
public ArgsType<Args...>
123 template <
typename Class,
typename R,
typename... Args>
124 struct ArgResolver<R (Class::*)(Args...) const> :
public ArgsType<Args...>
127 template <
typename Class,
typename R,
typename... Args>
128 struct ArgResolver<R (Class::*)(Args...) const noexcept> :
129 public ArgsType<Args...>
132 template <
typename Class,
typename R,
typename... Args>
133 struct ArgResolver<R (Class::*const)(Args...) const> :
public ArgsType<Args...>
136 template <
typename Class,
typename R,
typename... Args>
137 struct ArgResolver<R (Class::*const)(Args...) const noexcept> :
138 public ArgsType<Args...>
146 template <
typename F,
typename Arg,
typename Enable =
void>
151 template <
typename F,
typename Arg>
154 typename std::enable_if_t<
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>>;
161 template <
class F,
class Arg>
164 typename std::enable_if_t<
165 std::is_invocable_v<std::decay_t<F>, QFuture<Arg>>>>
167 using ResultType = std::invoke_result_t<std::decay_t<F>, QFuture<Arg>>;
174 typename std::enable_if_t<
175 std::is_invocable_v<std::decay_t<F>, QFuture<void>>>>
177 using ResultType = std::invoke_result_t<std::decay_t<F>, QFuture<void>>;
184 typename std::enable_if_t<
185 !std::is_invocable_v<std::decay_t<F>, QFuture<void>>>>
187 using ResultType = std::invoke_result_t<std::decay_t<F>>;
Definition: QtFutureContinuations.h:99
Definition: Qt5Promise.h:27
Definition: QtFutureHelpers.h:147