1

VSで欠落しているタイプ名を識別する方法はありますか?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)
}
4

2 に答える 2

1

100%標準に準拠しているかどうかはわかりませんが、MSVCは、明示的に必要とされたすべてまたはほとんどの場合に、コンパイラ警告(レベル1)C4346を生成します。したがって、コンパイラフラグ以上typenameでコンパイルしている限り、問題はありません。/W1

于 2013-02-18T16:44:30.510 に答える
1

実際、現在のバージョンのC ++(C ++ 11)では、それほど多くのことを書く必要はありません。あなたはこれを書くことができます:

auto it = dum_vector.begin(); 

これで完了です。

これはMSVC10以降でサポートされているため、使用している場合は、の代わりautoに使用することをお勧めします。古いバージョンを使用している場合は、アップグレードして、C++11機能の利点を可能な限り利用することをお勧めします。それができない場合、コンパイラが最初に非標準コードをコンパイルすることを考えると、MSVSが欠落しているタイプ名を教えてくれる可能性はほとんどありません。autoblah::blah::iterator

于 2013-02-18T16:02:25.957 に答える