c++templatesc++11template-aliases

Can I use template aliases as template template parameters?


Can I use template aliases as template template parameters?

template <template <typename...> class> struct foo {};

template <typename T> using simple_ptr = std::unique_ptr<T>;

foo<std::unique_ptr> a; // this doesn't work, std::unique_ptr has two parameters
foo<simple_ptr> b; // does this work?

Solution

  • Yes, it is apparently allowed. According to the latest draft of the upcoming standard I could find, it is stated that

    A template-argument for a template template-parameter shall be the name of a class template or an alias template [...].

    However, alias templates seems very seldomly supported at the moment, so you might have some trouble making it work with most compilers.