下面的代码工作正常:
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