型パラメーターとテンプレート テンプレート パラメーターを持つ、次のテンプレート クラスの型パラメーターを特化したいと考えています。
template <
typename T,
template <typename E> class Foo
> class Bar;
.template
次の各スニペットの最後の行にand /or を追加および/または省略して、すべての順列を試し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
どうすればこれを機能させることができますか?