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>
48 tuple_like_to_tuple_impl(Arg&& arg, std::index_sequence<Ix...>)
50 return std::tuple {
get(std::forward<Arg>(arg), std::integral_constant<std::size_t, Ix>{})...};
62 template<tuple_like Arg>
63 constexpr detail::stl_tuple_like decltype(
auto)
65 template<
typename Arg, std::enable_if_t<tuple_like<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<std::tuple_size_v<std::decay_t<Arg>>>{});
78 #endif //OPENKALMAN_TUPLE_LIKE_TO_TUPLE_HPP Definition for collections::tuple_like.
Definition: tuple_reverse.hpp:103
constexpr bool value
T is numerical value or is reducible to a numerical value.
Definition: value.hpp:31
Definition: tuple_like_to_tuple.hpp:30
decltype(auto) constexpr tuple_like_to_tuple(Arg &&arg)
Convert a tuple_like object to a std::tuple or equivalent.
Definition: tuple_like_to_tuple.hpp:68
Definition: tuple_like_to_tuple.hpp:24