Сводная информация о критических изменениях, которые могут приводить к ошибкам компиляции
Обновлен: Ноябрь 2007
В этом разделе сведены воедино все ошибки и предупреждения времени выполнения, которые могут быть получены в коде, компилировавшемся без ошибок в версиях перед Visual C++ 2003. Однако некоторые связанные с совместимостью критические изменения, которые могут приводить к ошибкам компиляции, приводятся в разделе Visual C++ 2005.
Заданную директиву препроцессора (C2004) теперь необходимо заключать в скобки.
При отсутствии ключевого слова "typename" и явных специализаций поиск параметров шаблона в первичном шаблоне больше не выполняется (C2146 ).
Обратиться к защищенному члену (n) можно только с помощью функции-члена класса (B), наследуемого от класса (A), членом которого является (n) (C2247).
Усовершенствованные проверки в компиляторе на доступность теперь обнаруживают недоступные базовые классы (C2247).
Явная специализация не может быть конструктором копий или оператором присваивания копий (C2299).
Исключение не может быть вызвано, если недоступен деструктор и/или конструктор копий (C2316).
Аргументы по умолчанию в указателях функций больше не разрешаются (C2383).
Член статических данных не может инициализироваться посредством производного класса (C2477).
Стандарт запрещает инициализацию определения типа, и теперь такая инициализация приводит к ошибке компилятора (C2513).
Правильным типом теперь является bool (C2632).
UDC теперь может вызывать неоднозначность в перегруженных операторах (C2666).
Преобразование квалификации – не то же самое, что преобразование идентификации (C2666).
В большинстве выражений теперь допустимы константы пустого указателя (C2668).
template<> теперь необходимо указывать там, где ранее компилятор вычислял его (C2768).
Если специализация функции-члена уже была явно задана через специализацию класса шаблона, то ее явная специализация вне класса недопустима (C2910).
Необходимо выбирать параметры каждой явной специализации таким образом, чтобы они соответствовали параметрам первичного шаблона (C2912).
Параметры шаблона типа, отличного от типа с плавающей запятой, больше не допускаются (C2993).
Шаблоны классов не допускаются в качестве аргументов типа шаблона (C3206).
Имена дружественных функций более не вводятся в содержащее пространство имен (C3767).
Улучшена согласованность указателя на член (C3867).
Компилятор больше не принимает излишние запятые в макросе (C4002).
Объект типа POD, созданный инициализатором вида (), будет инициализирован по умолчанию (C4345).
Параметр typename теперь обязателен, если зависимое имя обрабатывается как тип (C4346).
Функции, которые ранее неправильно считались специализациями шаблонов, более таковыми не считаются (C4347).
Элементы статических данных не могут инициализироваться посредством производного класса (C4356).
Специализация шаблона класса должна быть задана прежде, чем будет использоваться в возвращаемом типе (C4686).
Компилятор теперь сообщает о недостижимом коде (C4702).
Должно быть задано дружественное объявление, объявляющее новую нешаблонную функцию (LNK2019).