17 #ifndef OPENKALMAN_TUPLE_LIKE_TO_TUPLE_HPP 18 #define OPENKALMAN_TUPLE_LIKE_TO_TUPLE_HPP 20 #include <type_traits> 28 #ifndef __cpp_concepts 29 template<
typename T,
typename =
void>
39 concept stl_tuple_like = requires(T t) { std::tuple_cat(t); };
46 template<
typename Arg, std::size_t...Ix>
50 return std::tuple {collections::get<Ix>(std::forward<Arg>(arg))...};
62 template<uniformly_gettable Arg>
63 constexpr detail::stl_tuple_like decltype(
auto)
65 template<
typename Arg, std::enable_if_t<uniformly_gettable<Arg>,
int> = 0>
66 constexpr decltype(
auto)
70 if constexpr (detail::stl_tuple_like<Arg>)
71 return std::forward<Arg>(arg);
73 return detail::tuple_like_to_tuple_impl(std::forward<Arg>(arg), std::make_index_sequence<size_of_v<Arg>>{});
constexpr bool value
T is a fixed or dynamic value that is reducible to a number.
Definition: value.hpp:45
Definition: tuple_like_to_tuple.hpp:30
Definition: trait_backports.hpp:64
decltype(auto) constexpr tuple_like_to_tuple(Arg &&arg)
Convert a uniformly_gettable object to a std::tuple or equivalent.
Definition: tuple_like_to_tuple.hpp:68
Definition: tuple_like_to_tuple.hpp:24