diff options
Diffstat (limited to 'src/base')
| -rw-r--r-- | src/base/QXmppFutureUtils_p.h | 15 |
1 files changed, 15 insertions, 0 deletions
diff --git a/src/base/QXmppFutureUtils_p.h b/src/base/QXmppFutureUtils_p.h index 1be0f8fa..d69ec7fd 100644 --- a/src/base/QXmppFutureUtils_p.h +++ b/src/base/QXmppFutureUtils_p.h @@ -36,6 +36,21 @@ struct overloaded : Ts... template<class... Ts> overloaded(Ts...) -> overloaded<Ts...>; +// Variation of std::visit allowing to forward unhandled types +template<typename ReturnType, typename T, typename Visitor> +auto visitForward(T variant, Visitor visitor) +{ + return std::visit([&](auto &&value) -> ReturnType { + using ValueType = std::decay_t<decltype(value)>; + if constexpr (std::is_invocable_v<Visitor, ValueType>) { + return visitor(std::move(value)); + } else { + return value; + } + }, + std::forward<T>(variant)); +} + template<typename F, typename Ret, typename A, typename... Rest> A lambda_helper(Ret (F::*)(A, Rest...)); |
