21 template<
typename...
Bases>
29 using std::decay_t<
Bases>::operator()...;
34 using Ts::operator()...;
39 template<
typename...
Vars,
typename...
Args>
45 template<
typename...
Vars,
typename...
Args>
51 template<
typename...
Vars,
typename...
Args>
81 decltype (
auto)
operator() (
const T&
var)
const
83 if constexpr (std::is_same_v<FinallyFunc, Void>)
99 template<
typename...
Args>
102 template<
typename T,
typename...
Args>
Visitor(detail::VisitorFinallyTag, Args &&... args, FinallyFunc &&func)
Visitor< F, detail::VisitorBase< Args... > > Finally(F &&func)
Overloaded(Ts...) -> Overloaded< Ts... >
Container< T > Filter(const Container< T > &c, F f)
detail::ScopeGuard< F > MakeScopeGuard(const F &f)
Returns an object performing passed function on scope exit.
auto InvokeOn(T &&t, Args &&... args)
auto Visit(const Either< Left, Right > &either, Args &&... args)
Visitor(Args &&...) -> Visitor< Void, Args... >
A proper void type, akin to unit (or ()) type in functional languages.
VisitorBase(Bases &&... bases)