Ограничения компилятора

Стандарт языка C++ рекомендует ограничения для различных языковых конструкций. Ниже приведен список случаев, когда компилятор Microsoft C++ не реализует рекомендуемые ограничения. Первое число — это ограничение, установленное в стандарте ISO C++11 (INCITS/ISO/IEC 14882-2011[2012], приложение B), а второй номер — это ограничение, реализованное компилятором Microsoft C++:

  • Уровни вложения составных операторов, структур управления итерацией и структуры элементов управления выбором — стандарт C++: 256, компилятор Microsoft C++ зависит от сочетания вложенных операторов, но обычно от 100 до 110.

  • Параметры в одном определении макросов — стандарт C++: 256, компилятор Microsoft C++ с помощью /Zc:preprocessor-:127 или с помощью /Zc:preprocessor:32767.

  • Аргументы в одном вызове макроса — стандарт C++: 256, компилятор Microsoft C++ с помощью /Zc:preprocessor-:127 или с помощью /Zc:preprocessor:32767.

  • Символы в строковом литерале или широкой строковой литерале (после объединения) — стандарт C++: 65536, компилятор Microsoft C++: 65535 однобайтовых символов, включая терминатор NULL, а также 32767 двухбайтовых символов, включая терминатор NULL.

  • Уровни вложенных классов, структур или определений объединения в одном struct-declaration-list стандарте C++: 256, компилятор Microsoft C++: 16.

  • Инициализаторы элементов в определении конструктора — стандарт C++: 6144, компилятор Microsoft C++: по крайней мере 6144.

  • Квалификация области одного идентификатора — стандарт C++: 256, компилятор Microsoft C++: 127.

  • Вложенные extern спецификации — стандарт C++: 1024, компилятор Microsoft C++: 9 (не подсчитывая неявную спецификацию в глобальных область или 10, если подсчитать неявную externextern спецификацию в глобальном область.).

  • Аргументы шаблона в объявлении шаблона — стандарт C++: 1024, компилятор Microsoft C++: 2046.

См. также

Нестандартное поведение