#ifndef SPROUT_SUB_ARRAY_TUPLE_HPP #define SPROUT_SUB_ARRAY_TUPLE_HPP #include #include #include #include #include #include #include #include #include #include #include namespace sprout { // // tuple_get // template inline SPROUT_CONSTEXPR typename sprout::container_traits >::value_type& tuple_get(sprout::sub_array& t) SPROUT_NOEXCEPT_EXPR(SPROUT_NOEXCEPT_EXPR(*sprout::next(sprout::internal_begin(t), I))) { static_assert(I < sprout::container_traits >::static_size, "tuple_get: index out of range"); return *sprout::next(sprout::internal_begin(t), I); } template inline SPROUT_CONSTEXPR typename sprout::container_traits >::value_type const& tuple_get(sprout::sub_array const& t) SPROUT_NOEXCEPT_EXPR(SPROUT_NOEXCEPT_EXPR(*sprout::next(sprout::internal_begin(t), I))) { static_assert(I < sprout::container_traits >::static_size, "tuple_get: index out of range"); return *sprout::next(sprout::internal_begin(t), I); } template inline SPROUT_CONSTEXPR typename sprout::container_traits >::value_type&& tuple_get(sprout::sub_array&& t) SPROUT_NOEXCEPT_EXPR(SPROUT_NOEXCEPT_EXPR(sprout::move(sprout::tuples::get(t)))) { return sprout::move(sprout::tuples::get(t)); } } // namespace sprout namespace std { // // tuple_size // template struct tuple_size > : public std::tuple_size::type> {}; // // tuple_element // template struct tuple_element > : public std::tuple_element::type> {}; } // namespace std #endif // #ifndef SPROUT_SUB_ARRAY_TUPLE_HPP