How can a type alias with using specify a template template argument dependent on a template argument?
c++, c++11, template-templates, templates, using
Solution
You need to specify that `type` is a template:
template<class T>
using special = templ< T::template type>;
This is needed because `T::type` is dependent on the template parameter `T`.
See also Where and why do I have to put the “template” and “typename” keywords?
Problem
Minimal example: ``` template<template<class ...> class> struct templ {}; template<class T> using special = templ<T::type>; int main() {} ``` clang++: ``` test.cpp:5:23: error: template argument for template template parameter must be a class template or type alias template using special = templ<T::type>; ``` Indeed, I mean to say that `T::type` is a class template, e.g. ``` struct detail1 { template <class T> using type = std::vector<T>; }; struct detail2 { template <class T> struct type {}; }; ``` But how can one say this? g++ suggests to use `typename T::type`, but this seams wrong to me, and indeed, this does not solve the error.