无论如何都要确定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)
}
答案 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
或更高版本进行编译,就应该没问题。