#if 0 #include #include #include // adapt boost::variant2 visitation for std::variant namespace boost::variant2 { template struct variant_size> : variant_size> {}; } template constexpr std::variant_alternative_t>& unsafe_get(std::variant& v) { static_assert( I < sizeof...(T), "Index out of bounds" ); return *std::get_if(&v); } template constexpr std::variant_alternative_t>&& unsafe_get(std::variant&& v) { static_assert( I < sizeof...(T), "Index out of bounds" ); return std::move( *std::get_if(&v) ); } template constexpr std::variant_alternative_t> const& unsafe_get(std::variant const& v) { static_assert( I < sizeof...(T), "Index out of bounds" ); return *std::get_if(&v); } template constexpr std::variant_alternative_t> const&& unsafe_get(std::variant const&& v) { static_assert( I < sizeof...(T), "Index out of bounds" ); return std::move( *std::get_if(&v) ); } template struct overloaded : Ts... { using Ts::operator()...; }; template overloaded(Ts...) -> overloaded; struct T0 {}; struct T1 {}; struct T2 {}; struct T3 {}; struct T4 {}; struct T5 {}; struct T6 {}; struct T7 {}; struct T8 {}; struct T9 {}; using example_variant = std::variant; int do_visit(example_variant v) { return boost::variant2::visit(overloaded{ [](T0) { return 3; }, [](T1) { return 5; }, [](T2) { return 8; }, [](T3) { return 9; }, [](T4) { return 10; }, [](T5) { return 11; }, [](T6) { return 12; }, [](T7) { return 13; }, [](T8) { return 14; }, [](T9) { return 233; } }, v); } #endif