在自己的定义中隐式实例化模板

时间:2015-02-25 09:12:06

标签: c++ templates

让我们考虑关于模板隐式实例化的简单示例:

#include <iostream>
template<int N>
class A
{
    static const int a = A<N-1>::a; //1, OK, doesn't require implicit intantiation
};

template<int N>
class B
{
    static const int a = B<1>::a; //2, Error, implicit instantiation of template 'B<1>' within its own definition
};


int main(){ }

DEMO

标准对此事实并不清楚。它所说的只是N3797::14.7.1/1 [temp.inst]

  

除非已明确表示类模板特化   实例化(14.7.2)或明确专门化(14.7.3),类   模板特化是在隐式实例化的时候   在需要a的上下文中引用特化   完全定义的对象类型或类的完整性   type会影响程序的语义。

1和2都不要求完全定义类类型,但是第二个引起关于隐式实例化的错误。我想了解原因。

0 个答案:

没有答案