#include <type_traits> #include <cstddef> template <typename T, typename... Ts> struct Index; template <typename T, typename... Ts> struct Index<T, T, Ts...> : std::integral_constant<std::size_t, 0> {}; template <typename T, typename U, typename... Ts> struct Index<T, U, Ts...> : std::integral_constant<std::size_t, 1 + Index<T, Ts...>::value> {};
You might want to add a C ++ 14-mode variable template:
template <typename T, typename... Ts> constexpr std::size_t Index_v = Index<T, Ts...>::value;
Demo
source share