| 814 | |
| 815 | template <int N, class T, class X> |
| 816 | CUTE_HOST_DEVICE constexpr |
| 817 | auto |
| 818 | prepend(T const& a, X const& x) |
| 819 | { |
| 820 | if constexpr (is_tuple<T>::value) { |
| 821 | if constexpr (N == tuple_size<T>::value) { |
| 822 | return a; |
| 823 | } else { |
| 824 | static_assert(N > tuple_size<T>::value); |
| 825 | return detail::construct(a, x, seq<>{}, make_seq<N-tuple_size<T>::value>{}, make_seq<tuple_size<T>::value>{}); |
| 826 | } |
| 827 | } else { |
| 828 | if constexpr (N == 1) { |
| 829 | return a; |
| 830 | } else { |
| 831 | static_assert(N > 1); |
| 832 | return detail::construct(cute::make_tuple(a), x, seq<>{}, make_seq<N-1>{}, seq<0>{}); |
| 833 | } |
| 834 | } |
| 835 | |
| 836 | CUTE_GCC_UNREACHABLE; |
| 837 | } |
| 838 | |
| 839 | template <class T, class X> |
| 840 | CUTE_HOST_DEVICE constexpr |