/*============================================================================= Copyright (c) 2011-2017 Bolero MURAKAMI https://github.com/bolero-MURAKAMI/Sprout Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) =============================================================================*/ #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_IF_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_IF_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_IF_EXPR(sprout::move(sprout::tuples::get(t))) { return sprout::move(sprout::tuples::get(t)); } } // namespace sprout namespace std { #if defined(__clang__) # pragma clang diagnostic push # pragma clang diagnostic ignored "-Wmismatched-tags" #endif // // tuple_size // template struct tuple_size > : public std::tuple_size::type> {}; // // tuple_element // template struct tuple_element > : public sprout::tuples::tuple_element::type> {}; #if defined(__clang__) # pragma clang diagnostic pop #endif } // namespace std #endif // #ifndef SPROUT_SUB_ARRAY_TUPLE_HPP