以下代码可以正常工作:
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
std::vector
的模板参数是未定义的行为(UB)。顺便提一句,如果你想要一个律师问题,可能需要自己想出一个简单的类型,比如template <typename> struct Empty{};
,然后给它赋值Empty<A> vA;
。(或者这确实只适用于std::vector
?) - GManNickGtemplate
的通用使用。 - iammilind