Я хочу специализировать параметр типа следующего класса шаблона, который имеет параметр типа и параметр шаблона шаблона:
template <
typename T,
template <typename E> class Foo
> class Bar;
Я пробовал каждую перестановку добавления и/или исключения .template
и typename
в последней строке каждого из следующих фрагментов, и ни один из них не компилируется:
1.)
template <
template <typename E> class Foo
> class Bar<int, Foo<typename E>>;
2.)
template <
template <typename E> class Foo
> class Bar<int, Foo.template <typename E>>;
3.)
template <
template <typename E> class Foo
> class Bar<int, Foo<E>>;
4.)
template <
template <typename E> class Foo
class Bar<int, Foo.template <E>>;
Почему ни один из них не работает?
Что касается последней строки каждого применимого фрагмента:
- Разве
typename
не поясняет, чтоE
— это тип, используемый классомFoo
, или этот синтаксис может использоваться только в теле{}
определения классаBar
? - Разве
template
не разъясняет, чтоFoo
является шаблоном, и, следовательно, не позволяет компилятору анализироватьFoo <
какFoo
"меньше чем", или этот синтаксис может использоваться только в теле{}
определения классаBar
?
Как я могу заставить это работать?