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