26#define USING_BOOST_VARIANT
29#ifndef USING_BOOST_VARIANT
32#include <boost/variant.hpp>
37#ifndef USING_BOOST_VARIANT
41using std::holds_alternative;
51using monostate = boost::blank;
53template<
typename... Args>
54inline auto visit(Args&&... args)
56 return boost::apply_visitor(std::forward<Args>(args)...);
59template<
typename Ret,
typename... Types>
60inline bool holds_alternative(
const boost::variant<Types...>& variant)
62 return boost::get<Ret>(&variant) !=
nullptr;
65template<
typename Ret,
typename... Types>
66inline Ret* get_if(boost::variant<Types...>* variant)
68 return boost::get<Ret>(variant);
71template<
typename Ret,
typename... Types>
72inline const Ret* get_if(
const boost::variant<Types...>* variant)
74 return boost::get<Ret>(variant);
79template<
typename... Types>
82#ifndef USING_BOOST_VARIANT
std::size_t variant_index(const variant< Types... > &var)