我有一个采用模板模板参数的类:
template <template <typename> class F>
class A {};
另一个带有内部模板化类的模板化类:
template <typename T>
class B {
public:
template <typename U>
class C {};
};
我希望能够在模板化上下文中将C
用作A
的模板模板参数:
template <typename T>
using D = A<B<T>::C>;
但是,这会导致错误消息:
“模板模板参数的模板参数必须是类模板或类型别名模板”
我假设我在typename
的声明中缺少template
和D
的魔咒,但是我无法弄清楚我的一生和错误消息并不是特别有用。
答案 0 :(得分:2)
错误消息抱怨B<T>::C
不是模板,因此与A
的模板模板参数不匹配。
您需要使用template
关键字来告诉编译器dependent name B<T>::C
(取决于模板参数T
)是模板。
template <typename T>
using D = A<B<T>::template C>;
// ~~~~~~~~