防止类模板中的隐式实例化

时间:2013-11-25 16:26:16

标签: c++ templates implicit

我正在尝试声明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;'

1 个答案:

答案 0 :(得分:0)

这似乎是g ++ - 4.2中的一个错误,因为我可以用该编译器重现你的问题。

如果你可以移动到至少4.4,你的代码将按原样编译。或者,您可以编写A< ::B, T1>* example;来强制它使用全局范围模板,该模板在4.2中编译。