Поделиться через


Сводная информация о критических изменениях, которые могут приводить к ошибкам компиляции

Обновлен: Ноябрь 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).

См. также

Ссылки

Критические изменения в компиляторе Visual C++