typename Visitor::result_type apply(Visitor& visitor) { return apply_impl(*this, visitor); }
decltype(auto) apply(F&& f, Tuple&& t) { using Indices = std::make_index_sequence<std::tuple_size<std::decay_t<Tuple>>::value>; return apply_impl(std::forward<F>(f), std::forward<Tuple>(t), Indices{}); }