32 #include <boost/variant.hpp>
40 template<
typename Head,
typename...
Tail>
43 using std::decay_t<Head>::operator();
47 : std::decay_t<Head> { std::forward<Head> (head) }
53 template<
typename Head>
56 using std::decay_t<Head>::operator();
59 : std::decay_t<Head> { std::forward<Head> (head) }
64 template<
typename R,
typename... Args>
71 template<
typename HeadVar,
typename... TailVars,
typename... Args>
72 auto Visit (
const boost::variant<HeadVar, TailVars...>& v, Args&&... args) ->
80 template<
typename T,
typename... Args>
constexpr List< T...> Tail(List< H, T...>)
auto InvokeOn(T &&t, Args &&...args) -> decltype(detail::VisitorBase< Args...>
VisitorBase(Head &&head, Tail &&...tail)
auto Visit(const boost::variant< HeadVar, TailVars...> &v, Args &&...args) -> decltype(detail::VisitorBase< Args...>