6 template<
class T,
class Variant,
template<
class,
class>
class Relation, std::size_t Index = 0>
8 constexpr size_t size{ std::variant_size_v<Variant> };
9 static_assert(Index != size,
"No type in the variant satisfies the specified relation.");
11 if constexpr (Relation<T, std::variant_alternative_t<Index, Variant>>::value)
15 return FindMatchIndexImpl<T, Variant, Relation, Index + 1>();
18 template<
class T,
class Variant,
template<
class,
class>
class Relation>
20 return FindMatchIndexImpl<T, Variant, Relation>();
24 template<
class T,
class Variant>
27 template<
class T,
class Variant>
28 using FirstEqualVariant = std::variant_alternative_t<FindMatchIndex<T, Variant, std::is_same>(), Variant>;
std::variant_alternative_t< FindMatchIndex< T, Variant, std::is_convertible >(), Variant > FirstConvertibleVariant
Definition LastMatchVariant.hpp:25
consteval size_t FindMatchIndexImpl()
Definition LastMatchVariant.hpp:7
consteval std::size_t FindMatchIndex()
Definition LastMatchVariant.hpp:19
std::variant_alternative_t< FindMatchIndex< T, Variant, std::is_same >(), Variant > FirstEqualVariant
Definition LastMatchVariant.hpp:28