| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182 | #ifndef __GBLIBCPP_BITS_TUPLE_TOOLS__#define __GBLIBCPP_BITS_TUPLE_TOOLS__#include <cstddef>#include <bits/type_traits/remove_add>#include <bits/forward>#include <bits/sequence>#include <bits/fwd_functional>namespace std {template <typename... Types>class tuple;template <std::size_t I, typename T>struct tuple_element;template <std::size_t I, typename T>using tuple_element_t = typename tuple_element<I, T>::type;template <typename T>struct tuple_size;template <typename T>inline constexpr std::size_t tuple_size_v = tuple_size<T>::value;template <std::size_t I, typename... Types>constexpr auto get(std::tuple<Types...>& tpl) noexcept    -> tuple_element_t<I, std::tuple<Types...>>&{ return tpl.template _getl<I>(); }template <std::size_t I, typename... Types>constexpr auto get(std::tuple<Types...>&& tpl) noexcept    -> tuple_element_t<I, std::tuple<Types...>>&&{ return tpl.template _getr<I>(); }template <std::size_t I, typename... Types>constexpr auto get(const std::tuple<Types...>& tpl) noexcept    -> tuple_element_t<I, std::tuple<Types...>> const&{ return tpl.template _getl<I>(); }template <std::size_t I, typename... Types>constexpr auto get(const std::tuple<Types...>&& tpl) noexcept    -> tuple_element_t<I, std::tuple<Types...>> const&&{ return tpl.template _getr<I>(); }namespace __helpers {template <typename T, typename Tuple, std::size_t... I>constexpr T make_from_tuple_impl(Tuple&& tpl, std::index_sequence<I...>){    return T(std::get<I>(std::forward<Tuple>(tpl))...);}template <typename _T, typename T = std::decay_t<_T>>struct __to_tuple_type { using type = T; };template <typename _T, typename T>struct __to_tuple_type<_T, std::reference_wrapper<T>>{ using type = std::add_lvalue_reference_t<T>; };template <typename T>using to_tuple_type_t = typename __to_tuple_type<T>::type;} // namespace __helperstemplate <typename T, typename Tuple>constexpr T make_from_tuple(Tuple&& tpl){    return __helpers::make_from_tuple_impl<T>(        std::forward<Tuple>(tpl),        std::make_index_sequence<            std::tuple_size_v<std::remove_cvref_t<Tuple>>> {}    );}}#endif
 |