C++ 如何在VisualStudio中识别缺少的typename

C++ 如何在VisualStudio中识别缺少的typename,c++,visual-studio,C++,Visual Studio,在VS中是否仍然可以识别缺少的typename?VS是否至少产生了某种警告 template<class T> void dum() { std::vector<T> dum_vector; typename std::vector<T>::iterator it = dum_vector.begin(); // VS compiles it with or without typename, but I would like to know

在VS中是否仍然可以识别缺少的typename?VS是否至少产生了某种警告

template<class T> 
void dum() {
  std::vector<T> dum_vector;
  typename std::vector<T>::iterator it = dum_vector.begin(); 
  // VS compiles it with or without typename, but I would like to know whether 
  // I forgot to put a typename, since without typename the code may not compile 
  // with another compiler (e.g. GCC)
}
模板
无效dum(){
std::向量dum_向量;
typename std::vector::iterator it=dum_vector.begin();
//VS编译它时使用或不使用typename,但我想知道

//我忘了输入typename,因为没有typename代码可能无法编译 //使用另一个编译器(例如GCC) }
实际上,在当前版本的C++(C++ 11)中,你不需要写那么多。你可以这样写:

auto it = dum_vector.begin(); 
你完成了


请注意,MSVC10支持
auto
,因此如果您正在使用它,我建议您使用
auto
代替
blah::blah::iterator
。如果您使用的是旧版本,最好升级并尽可能利用C++11特性的优点。如果您不能做到这一点,那么MSV不太可能告诉您缺少的typename,因为编译器首先编译的是非标准代码

我不确定它是否有100%的标准一致性,但MSVC为所有或大多数明确需要
typename
的情况提供了产品。因此,只要您使用编译器标志
/W1
或更高版本进行编译,您就可以了。

“因为没有类型名,代码可能无法使用其他编译器进行编译”=>“因为没有类型名,代码的格式不好,C++”。我们谈论的是什么版本的VS?@FredOverflow这是如何重复的?这个问题不是问关键词是什么或它们在哪里应用,而是如何让MSVC从其唯一性宝座上退下来,至少提到它何时接受非标准语法。@Angew如果你知道规则,手动识别缺少的
typename
s是可能的;)@虽然也可以编写没有bug的代码,但很少有人能够管理;-)这就是为什么我们有编译器会给我们警告和错误。谢谢,虽然我非常感谢C++11中的auto,但我目前从事的项目还没有切换到与C++11兼容的编译器。另外,谢谢你的补充说明,我也同意这一点。如果我的问题没有其他答案,我将接受你的答案(因为你试图解释为什么不提供这种支持)。这很奇怪。我正在使用\W3,但是VS10没有收到任何警告。