1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
template <typename T> using Foo = T; template <typename T> using Bar = Foo<T>; template <typename T> struct Container {}; int main() { Foo<int> f1; Foo<double> f2; Bar<int> b1; Bar<double> b2; Bar<Foo<int>> bf1; Bar<Foo<double>> bf2; Container<Bar<Foo<int>>> cbf1; return 0; }