Added variant_index utility trait.

This commit is contained in:
Patrick Wuttke
2026-02-17 10:25:09 +01:00
parent 1bb64f0473
commit d42eb12377

View File

@@ -20,6 +20,29 @@ inline constexpr bool variant_contains_v = false;
template<typename TSearch, typename... TVariantTypes>
inline constexpr bool variant_contains_v<TSearch, std::variant<TVariantTypes...>> = mijin::is_any_type_v<TSearch, TVariantTypes...>;
template<typename TSearch, typename TVariant>
struct variant_index;
template<typename TSearch, typename TFirst, typename... TVariantTypes>
struct variant_index<TSearch, std::variant<TFirst, TVariantTypes...>>
{
static constexpr std::size_t getValue() noexcept
{
if constexpr (std::is_same_v<TSearch, TFirst>) {
return 0;
}
else {
return variant_index<TSearch, std::variant<TVariantTypes...>>::getValue() + 1;
}
}
static constexpr std::size_t value = getValue();
};
template<typename TSearch, typename TVariant>
inline constexpr std::size_t variant_index_v = variant_index<TSearch, TVariant>::value;
//
// public types
//