text: #pragma once
  
  #include <utility>
  #include <li/metamap/make.hh>
  
  namespace li {
  
  namespace internal {
  
  template <typename... S, typename... V, typename T, T... I>
  auto forward_tuple_as_metamap_impl(std::tuple<S...> keys, std::tuple<V...>& values, std::integer_sequence<T, I...>) {
    return make_metamap_reference((std::get<I>(keys) = std::get<I>(values))...);
  }
  template <typename... S, typename... V, typename T, T... I>
  auto forward_tuple_as_metamap_impl(std::tuple<S...> keys, const std::tuple<V...>& values, std::integer_sequence<T, I...>) {
    return make_metamap_reference((std::get<I>(keys) = std::get<I>(values))...);
  }
  
  } // namespace internal
  
  template <typename... S, typename... V>
  auto forward_tuple_as_metamap(std::tuple<S...> keys, std::tuple<V...>& values) {
    return internal::forward_tuple_as_metamap_impl(keys, values, std::make_index_sequence<sizeof...(V)>{});
  }
  template <typename... S, typename... V>
  auto forward_tuple_as_metamap(std::tuple<S...> keys, const std::tuple<V...>& values) {
    return internal::forward_tuple_as_metamap_impl(keys, values, std::make_index_sequence<sizeof...(V)>{});
  }
  
  } // namespace li