template<class Visitor, class... Variants>
constexpr see below visit(Visitor&& vis, Variants&&... vars);
template<class R, class Visitor, class... Variants>
constexpr R visit(Visitor&& vis, Variants&&... vars);
template<class Self, class Visitor>
constexpr decltype(auto) visit(this Self&& self, Visitor&& vis);
template<class R, class Self, class Visitor>
constexpr R visit(this Self&& self, Visitor&& vis);