using MyDiscreminatedUnion = std::variant<MyType1, MyType2, MyType3>; MyDiscreminatedUnion var = MyType2{}; std::visit(overload { [](MyType1 t1) {...}, [](MyType2 t2) {...}, [](auto t) {...}, }, var);
namespace StlHelpers {
template<class... Ts> struct overload : Ts... { using Ts::operator()...; };
template<class... Ts> overload(Ts...) -> overload<Ts...>;
template<class var_t, class... Func> auto visit(var_t & variant, Func &&... funcs)
{
return std::visit(overload{ funcs... }, variant);
}
And then
StlHelpers::visit(var,
[](MyType1 t1) {...}, [](MyType2 t2) {...}, [](auto t) {...}