#include <array> #include <tuple> #include <variant> #include <iostream> #include <functional> using std::tuple; using std::array; using std::variant; using std::cout; #include "MyData.h" template<size_t... Is, typename... Ts> array<variant<std::reference_wrapper<Ts>...>, sizeof...(Ts)> convert_impl(tuple<Ts...>& in, std::index_sequence<Is...>) { return {{variant<std::reference_wrapper<Ts>...>(std::in_place_index_t<Is>{}, std::ref(std::get<Is>(in)))...}}; } template<typename... Ts> array<variant<std::reference_wrapper<Ts>...>, sizeof...(Ts)> convert(tuple<Ts...>& in) { return convert_impl(in, std::make_index_sequence<std::tuple_size_v<tuple<Ts...>>>{}); }