2013-02-18 2 views
0

Есть ли способ идентифицировать недостающее имя в VS? По-видимому, VS какое-то предупреждение?Как идентифицировать недостающее имя в Visual Studio

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

«так как без typename код не может компилироваться с другим компилятором« => », так как без typename код не был хорошо сформирован C++». – juanchopanza

+0

В какой версии VS мы говорим? – fredoverflow

+4

@FredOverflow Как это дубликат? Этот вопрос не спрашивает, для чего нужны ключевые слова или где они применяются, но как заставить MSVC отказаться от своего престола уникальности и, по крайней мере, указать *, когда он принимает нестандартный синтаксис. – Angew

ответ

1

Я не уверен, имеет ли он 100% стандартное соответствие, но MSVC производит Compiler Warning (level 1) C4346 для всех или большинства случаев, в которых явно требуется typename. Так что, пока вы компилируете флаг компилятора /W1 или выше, вы должны быть в порядке.

+0

Странно. Я использую \ W3, но не получаю предупреждения VS10. – user2083875

1

Фактически в текущей версии C++ (который является C++ 11) вам не нужно много писать. Вы просто могли бы написать это:

auto it = dum_vector.begin(); 

и все готово.

Обратите внимание, что auto поддерживается с MSVC10, поэтому, если вы используете его, я бы рекомендовал вам использовать auto вместо blah::blah::iterator. Если вы используете более старую версию, лучше как можно больше обновить и использовать преимущества возможностей C++ 11. Если вы не можете этого сделать, то очень маловероятно, что MSVS может сообщить вам отсутствующее имя-типа, учитывая, что компилятор компилирует нестандартный код в первую очередь!

+1

Спасибо, хотя я очень благодарен за авто в C++ 11, текущий проект что я работаю, еще не переключился на совместимый с C++ 11 компилятор. – user2083875

+0

Также спасибо за дополнительную заметку, и я также согласен с этим. Если нет других ответов на мой вопрос, я собираюсь принять ваш ответ (поскольку вы пытаетесь объяснить, почему такая поддержка может не предоставляться). – user2083875