下面的代码工作正常:
template<typename T> class X {};
class A; // line-1
void foo(); // line-2
int main ()
{
X<A> vA;
}
class A {};
void foo() {}
让 line-1 和 line-2 移到里面main()
。该函数不会受到影响,但class A
前向声明不起作用并给出编译器错误:
template<class T> class X
错误:使用本地类型的模板参数main()::A