25 using PlainTuple = std::remove_cv_t<Tuple>;
26 using TupleOfPlainTypes = mp_transform<std::remove_cvref_t, PlainTuple>;
27 using Index = mp_find<TupleOfPlainTypes, T>;
29 if constexpr (Index::value != mp_size<PlainTuple>::value)
31 return std::get<Index::value>(t);
35 return getImpl<T>(ts...);
59auto&
get(Tuples&... ts)
63 static_assert(std::is_same_v<T, std::remove_cvref_t<T>>,
64 "The passed type T must not be cvref qualified.");
67 std::remove_cv_t<Tuples>...>::type;
68 using FlattenedTupleOfPlainTypes =
69 mp_transform<std::remove_cvref_t, FlattenedTuple>;
72 mp_is_set_v<FlattenedTupleOfPlainTypes>,
73 "The types of all elements of all passed tuples must be unique.");
75 static_assert(mp_contains_v<FlattenedTupleOfPlainTypes, T>,
76 "Type T must be inside any of the passed tuples.");
78 return detail::getImpl<T>(ts...);