Variadic alias templates
Everything that can be templatized can also be made variadic. An alias template is an alias (another name) for a family of types. A variadic alias template is a name for a family of types with a variable number of template parameters. With the knowledge accumulated so far, it should be fairly trivial to write alias templates. Let's see an example:
template <typename T, typename... Args> struct foo { }; template <typename... Args> using int_foo = foo<int, Args...>;
The class template foo
is variadic and takes at least one type template argument. int_foo
, on the other hand, is only a different name for a family of types instantiated from the foo
type with int
as the first type template arguments. These could be used as follows:
foo<double, char, int> f1; foo<int, char, double> f2; int_foo<char, double> f3; static_assert(std::is_same_v<decltype(f2), decltype(f3)>);
In this snippet, f1
on one hand and...