10template<
typename T,
typename Head,
typename... Tail>
11constexpr size_t count_type_if(
size_t count = 0) {
12 if constexpr (
sizeof...(Tail) > 0) {
13 return count_type_if<T, Tail...>(std::is_same_v<T, Head> ?
count + 1 :
count);
15 return std::is_same_v<T, Head> ?
count + 1 :
count;
19template<
typename T,
typename Head,
typename... Tail>
20constexpr size_t index_of_type(
size_t index = 0) {
21 static_assert(std::is_same_v<T, Head> ||
sizeof...(Tail) > 0,
"Could not find type");
22 if constexpr (
sizeof...(Tail) > 0) {
23 return (std::is_same_v<T, Head>) ? index : index_of_type<T, Tail...>(index + 1);