21 using namespace boost::mp11;
23 using PlainTuple = std::remove_cv_t<Tuple>;
24 using TupleOfPlainTypes = mp_transform<std::remove_cvref_t, PlainTuple>;
25 using Index = mp_find<TupleOfPlainTypes, T>;
27 if constexpr (Index::value != mp_size<PlainTuple>::value)
29 return std::get<Index::value>(t);
33 return getImpl<T>(ts...);
67auto&
get(Tuples&... ts)
69 using namespace boost::mp11;
71 static_assert(std::is_same_v<T, std::remove_cvref_t<T>>,
72 "The passed type T must not be cvref qualified.");
75 std::remove_cv_t<Tuples>...>::type;
76 using FlattenedTupleOfPlainTypes =
77 mp_transform<std::remove_cvref_t, FlattenedTuple>;
80 detail::mp_is_set_v<FlattenedTupleOfPlainTypes>,
81 "The types of all elements of all passed tuples must be unique.");
83 static_assert(detail::mp_contains_v<FlattenedTupleOfPlainTypes, T>,
84 "Type T must be inside any of the passed tuples.");
86 return detail::getImpl<T>(ts...);