Cómo revertir una TypeList a su paquete de parámetros original

Tengo problemas para encontrar información sobre cómo usar las listas de tipos variad de c ++ 11 como contenedores para paquetes de parámetros portátiles. Digamos que tenía este pedazo de código.

#include  template  struct Index; template  struct Index : std::integral_constant {}; template  struct Index : std::integral_constant<std::size_t, 1 + Index::value> {}; 

Puedo usarlo para encontrar el primer índice de un tipo dentro de un paquete de parámetros como este.

 int main() { using namespace std; cout << Index::value << endl; //Prints 0 cout << Index::value << endl; //Prints 1 cout << Index::value << endl; //Prints 2 } 

¿Cómo podría lograr este comportamiento para un TypeList? Estoy tratando de crear algo como esto.

 template  struct TypeList {}; int main() { using namespace std; using List = TypeList cout << Index<short, ConvertToParameterPack::types...>::value << endl; //Prints 1 } 

Donde ConvertToParameterPack es un método para revertir un TypeList a su ParameterPack. Si lo que pido es imposible, ¿hay alguna otra buena manera de resolver esto?

 template using index_t=std::integral_constant; template struct Index{}; template struct Index>: index_t<0> {}; template struct Index>: index_t< 1+Index::value > {}