Ответ 1
VS 2010 имеет нечто двойственное. В частности, на самом деле у него есть два полностью отдельных конца компилятора.
Когда вы компилируете код, который выполняется с собственным компилятором Microsoft, который полностью возвращается к MS C 3.0 для MS-DOS, выпущен ~ 3 десятилетия назад (в случае, если вам интересно, почему это было 3.0, MS продала перемаркированная версия Lattice C до этого).
До VS 2008, синтаксический анализ в среде IDE был довольно примитивным по сравнению с компилятором, поэтому он не разбирал много более сложных С++ совершенно правильно. Они решили, что это неприемлемо, и вместо того, чтобы пытаться обновить существующий парсер IDE в соответствии с компилятором, они лицензировали интерфейс компилятора EDG.
Это дает более или менее противоположную ситуацию: синтаксический анализатор IDE для Intellisense теперь значительно ближе к согласованию, чем тот, что есть в компиляторе, и распознает справедливое количество конструкций С++ 0x, которые нет в компиляторе.
В этом рассказе немного больше, чем просто: front-end компилятора EDG поддерживает переключатель, чтобы заставить его действовать скорее как VС++, включая эмуляцию множества ошибок VС++. Хотя у меня нет данных, чтобы подтвердить это, я полагаю, что Microsoft использует эту возможность. Поскольку это основано на EDG с использованием компилятора VС++ и эмуляции его ошибок, вероятно, справедливое предположение, что (по крайней мере, обычно) эмуляция EDG VС++ будет работать с версией, находящейся за VС++. Это дает несколько парадоксальную ситуацию, когда EDG (при нормальном использовании), как правило, немного опережает VС++, но версия MS, используемая в среде IDE, вероятно, будет по крайней мере немного отставать большую часть времени.