问题描述
我想知道为什么在两种情况下我们是否需要使用 typename 关键字:
template <T>
void foo(void)
{
std::vector<T> v;
typename std::vector<T>::iterator it;
}
在使用迭代器的情况下,如果未指定typename,则编译器会向我们发送错误消息。
谢谢!
解决方法
根据C ++ 17标准(名称解析为17.7)
2模板声明或定义中使用的名称,即
除非依赖模板参数,否则除非命名类型,否则除非
适用的名称查找找到类型名称或名称合格
通过关键字typename。