Added variant_index utility trait.
This commit is contained in:
@@ -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
|
||||
//
|
||||
|
||||
Reference in New Issue
Block a user