C ++中typename关键字的用例

问题描述

我想知道为什么在两种情况下我们是否需要使用 typename 关键字:

template <T>
void foo(void)
{
   std::vector<T> v;
   typename std::vector<T>::iterator it;
}

在使用迭代器的情况下,如果未指定typename,则编译器会向我们发送错误消息。

谢谢!

解决方法

根据C ++ 17标准(名称解析为17.7)

2模板声明或定义中使用的名称,即 除非依赖模板参数,否则除非命名类型,否则除非 适用的名称查找找到类型名称或名称合格 通过关键字typename。