1 #ifndef _TUPLEELEMENTS_HPP 2 #define _TUPLEELEMENTS_HPP 8 #include <ints/Ranges.hpp> 9 #include <metaprogramming/SFINAE.hpp> 10 #include <metaprogramming/UniversalReferences.hpp> 11 #include <tuple/TupleClass.hpp> 12 #include <tuple/TupleOrder.hpp> 20 template <std::size_t I,
22 constexpr std::tuple_element_t<I,T>&&
25 return std::get<I>(forw<T>(t));
34 constexpr Tg&&
get(
T&&
t)
36 return std::get<Tg>(forw<T>(t));
54 typename=EnableIf<isTupleLike<T>>>
58 if constexpr(I<tupleSize<T>)
60 f(get<I>(forw<T>(t)));
61 forEach<I+1>(forw<T>(t),forw<F>(f));
71 template <
typename Tp,
73 DECLAUTO getIndexed(
const IntSeq<Ints...>&,
77 std::make_tuple(std::get<Ints>(forw<Tp>(tp))...);
89 getIndexed(IntsUpTo<N>{},forw<Tp>(tp));
105 constexpr
int offset=
109 getIndexed(RangeSeq<offset,1,size>{},forw<Tp>(tp));
127 return getIndexed(IntSeqCat<IntsUpTo<N>,RangeSeq<N+1,1,tupleSize<Tp>>>{},forw<Tp>(tp));
140 template <
typename Tg,
145 return getAllButPos<posOfType<Tg,Tp>>(forw<Tp>(tp));
#define SFINAE_ON_TEMPLATE_ARG(...)
constexpr Tg && get(T &&t)
#define DECLAUTO
Short name for decltype(auto)