28#include <boost/mp11.hpp>
46template <
typename SupportedTypes,
typename AllVariants,
typename ToContainer>
50 to_container.reserve(from_container.size());
52 for (
const auto &p : from_container)
55 [&to_container](
auto &arg)
57 using T = std::decay_t<
decltype(arg)>;
58 if constexpr (boost::mp11::mp_find<SupportedTypes, T>{} != boost::mp11::mp_size<SupportedTypes>{})
60 to_container.push_back(
typename ToContainer::value_type{arg});
73template <
class... FromArgs>
79 std::variant<FromArgs...>
v;
85 template <
class... ToArgs>
86 operator std::variant<ToArgs...>()
const
88 return std::visit([](
auto &&arg) -> std::variant<ToArgs...> {
return arg; },
v);
100template <
class... Args>
101static auto variant_cast(
const std::variant<Args...> &v) ->
variant_cast_proxy<Args...>