tupleからvariantのarrayに変換する

タイトル通りです。もしかしたら便利な事があるかもしれません。

#include <sprout/tuple.hpp>
#include <sprout/array.hpp>
#include <sprout/variant.hpp>
#include <sprout/index_tuple.hpp>

template <typename... Types, sprout::index_t... Indices>
constexpr auto tuple_to_varray_impl(const sprout::tuple<Types...>& t,
                                    const sprout::index_tuple<Indices...>&) {
  return sprout::make_array<sprout::variant<Types...>>(
      sprout::variant<Types...>(sprout::get<Indices>(t))...);
}

template <typename... Types>
constexpr auto tuple_to_varray(const sprout::tuple<Types...>& t) {
  return tuple_to_varray_impl(t,
                              sprout::index_range<0, sizeof...(Types)>::make());
}

int main() {
  constexpr auto result = tuple_to_varray(sprout::make_tuple(1, 'a', 3.14));
  static_assert(result[0] == 1, "");
  static_assert(result[1] == 'a', "");
  static_assert(result[2] == 3.14, "");
}