我正在尝试声明B类,如下所示。问题是,据我所知,A<B, T1>
实际上被隐含地视为A<B<T1>, T1>
,它与A类定义不匹配。因此,我的问题是:是否可以在其“模板 - 非实例化”形式的自己定义中使用B类?如果是这样的话?
template <template <class T1> class T2, class T1>
class A {
};
template <class T1>
class B {
A<B, T1>* example;
};
导致gcc4.2:
出现以下编译错误错误:模板参数列表中参数1的类型/值不匹配'template&lt;模板&lt; T1类&gt; T2级,T1级&gt; A级'
错误:期望一个类模板,得到'B&lt; T1&gt;'
答案 0 :(得分:0)
这似乎是g ++ - 4.2中的一个错误,因为我可以用该编译器重现你的问题。
如果你可以移动到至少4.4,你的代码将按原样编译。或者,您可以编写A< ::B, T1>* example;
来强制它使用全局范围模板,该模板在4.2中编译。