42 template<
typename... Bases>
46 :
std::decay_t<Bases> { std::forward<Bases> (bases) }...
50 using std::decay_t<Bases>::operator()...;
55 using Ts::operator()...;
60 template<
typename... Vars,
typename... Args>
61 decltype (
auto)
Visit (const
std::variant<Vars...>& v, Args&&... args)
66 template<
typename... Vars,
typename... Args>
67 decltype (
auto)
Visit (
std::variant<Vars...>& v, Args&&... args)
77 template<
typename FinallyFunc,
typename... Args>
85 : Base_ { std::forward<Args> (args)... }
90 : Base_ { std::forward<Args> (args)... }
91 , Finally_ { std::forward<FinallyFunc> (func) }
96 decltype (
auto) operator() (const T& var)
const 98 if constexpr (std::is_same_v<FinallyFunc, Void>)
99 return Visit (var, Base_);
103 return Visit (var, Base_);
114 template<
typename... Args>
117 template<
typename T,
typename... Args>
120 return detail::VisitorBase<Args...> { std::forward<Args> (args)... } (std::forward<T> (t));
Visitor< F, detail::VisitorBase< Args... > > Finally(F &&func)
Visitor(const detail::VisitorFinallyTag &, Args &&... args, FinallyFunc &&func)
Overloaded(Ts...) -> Overloaded< Ts... >
auto Visit(const Either< Left, Right > &either, Args &&... args)
auto InvokeOn(T &&t, Args &&... args)
VisitorBase(Bases &&... bases)
detail::ScopeGuard< F > MakeScopeGuard(const F &f)
Returns an object performing passed function on scope exit.
Visitor(Args &&...) -> Visitor< Void, Args... >