Мы сократили часть кода, мы не можем найти правильный синтаксис для минимального примера.Эквивалент «typename», чтобы указать, что зависимое имя действительно является «параметром шаблона шаблона»
Давайте предположим, что следующие определения (не беспокойтесь о «почему»;)
template <class>
class Element
{};
template <template <class> class>
class Client
{};
template <class>
struct TemplatedProvider
{
template <class T>
using element_template = Element<T>;
};
Теперь, с C++ 11 и далее, мы можем использовать либо шаблон класса или шаблон типа псевдонима для конкретизации Client
шаблон. Следующая функция компилируется нормально:
void fun()
{
Client<Provider::element_template> client;
Client<TemplatedProvider<int>::element_template> clientBis;
}
Но мы не можем найти правильный синтаксис в следующем случае, когда аргумент шаблона дано Client
является зависимым именем:
template <class T>
void templatedFun()
{
Client<TemplatedProvider<T>::element_template> client;
}
Clang (протестировано с 3,6) испускает следующую ошибку компиляции:
template argument for template template parameter must be a class template or type alias template
Можем ли мы исправить этот синтаксис?
Хорошее дополнение с информационной ссылкой – GreatAndPowerfulOz