#include "visitor.hpp"
namespace cpp
{
namespace detail
{
template <typename Head, typename ... Tail, std::size_t ... Is>
auto tuple_tail(const std::tuple<Head, Tail...>& tuple, std::index_sequence<Is...>);
template <typename Head, typename ... Tail>
auto tuple_tail(const std::tuple<Head, Tail...>& tuple);
template <typename Visitor, typename MatchedValues, typename Variants>
MultiVisitorProcessor<Visitor, MatchedValues, Variants> make_visitor_processor(Visitor&& visitor, MatchedValues&& matchedValues, Variants&& variants);
template <typename Visitor, typename MatchedValues, typename Variant, typename ... Tail>
class MultiVisitorProcessor<Visitor, MatchedValues, std::tuple<Variant, Tail...>>;
template <typename Visitor, typename MatchedValues>
class MultiVisitorProcessor<Visitor, MatchedValues, std::tuple<>>;
}
template <typename T, typename ... Visitors>
auto multi_visitor(Visitors&&... visitors);
}