如何在Visual Studio中标识缺少的类型名称

时间:2013-02-18 15:52:48

标签: 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 whether 
  // I forgot to put a typename, since without typename the code may not compile 
  // with another compiler (e.g. GCC)
}

2 个答案:

答案 0 :(得分:1)

实际上在当前版本的C ++(即C ++ 11)中,你不需要写那么多。你可以写下这个:

auto it = dum_vector.begin(); 

你已经完成了。

请注意,自MSVC10起支持auto,因此如果您使用它,我建议您使用auto代替blah::blah::iterator。如果您使用的是旧版本,则最好尽可能地升级并利用C ++ 11功能。如果您不能这样做,那么MSVS可以告诉您丢失的类型名称非常不可能,因为编译器首先编译非标准代码!

答案 1 :(得分:1)

我不确定它是否具有100%的标准一致性,但MSVC对明确需要typename的所有或大多数情况产生Compiler Warning (level 1) C4346。因此,只要您使用编译器标志/W1或更高版本进行编译,就应该没问题。