c++ parameter pack
A parameter pack (typename... T) can hold zero or more type parameters. It’s the foundation of variadic templates.
template <typename... T> // T is a parameter pack
struct Example;
Example<int, float, double>; // T... = int, float, double
Example<char>; // T... = char
Example<>; // T... = (empty)