#ifndef SPROUT_VARIANT_TUPLE_HPP #define SPROUT_VARIANT_TUPLE_HPP #include #include #include #include #include #include namespace sprout { // // tuple_get // template inline SPROUT_CONSTEXPR typename sprout::tuples::tuple_element< I, sprout::variant >::type const& tuple_get(sprout::variant const& t) { return t.template get_at(); } template inline SPROUT_CONSTEXPR typename sprout::tuples::tuple_element< I, sprout::variant >::type& tuple_get(sprout::variant& t) { return t.template get_at(); } template inline SPROUT_CONSTEXPR typename sprout::tuples::tuple_element< I, sprout::variant >::type&& tuple_get(sprout::variant&& 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::tuple_type> {}; // // tuple_element // template struct tuple_element > : public std::tuple_element::tuple_type> {}; #if defined(__clang__) # pragma clang diagnostic pop #endif } // namespace std #endif // #ifndef SPROUT_VARIANT_TUPLE_HPP