Использовать std:: initializer_list в Visual С++ Compiler Ноябрь 2012 CTP

Я хочу использовать std::initializer_list в Visual Studio 2012 как парень в этот пример. Моя операционная система - Windows 8 x64.

Поэтому я недавно установил Visual С++ Compiler November 2012 CTP и, как упоминалось Microsoft, я изменил набор инструментов платформы своего проекта, чтобы использовать это новый обновленный компилятор.

Но даже после этого не существует ни заголовка std::initializer_list, ни <initializer_list>. Но связанный веб-сайт из Microsoft сообщает мне (под заголовком "Обзор" ), что списки инициализаторов будут доступны с этим обновлением. Я перезапустил и IDE, и мой компьютер. Я не уверен, может ли это быть вызвано тем, что я (к сожалению) использую немецкое издание Visual Studio, а обновление компилятора - на английском языке. Что я делаю неправильно?

Обновление. Пытаясь скомпилировать строку auto a = { 0 };, критикуемую IntelliSense, вывод компилятора показывает 'Microsoft Visual C++ Compiler Nov 2012 CTP' is for testing purposes only., а затем сбой компилятора и появляется окно с ошибкой, которое читает Microsoft (R) C/C++ Compiler Driver has stopped working. Без какого-либо нового синтаксиса все компилируется и отлично работает с выбранным новым компилятором.

Ответ 1

(Я работаю в Microsoft и с Dinkumware для поддержки реализации стандартной библиотеки VC.)

[Данияр]

Я не уверен, может ли это быть вызвано тем, что я (к сожалению) использую немецкую версию Visual Studio, а обновление компилятора - на английском языке.

К сожалению, английский CTP не поддерживает немецкий VS.

"Драйвер компилятора" cl.exe - это то, что вызывает компилятор front-end c1xx.dll, компилятор c2.dll компилятора и linker link.exe. Для драйвера компилятора очень необычно сбой. Я предполагаю, что он пытается отобразить одно из сообщений об ошибках, которые были добавлены CTP, но так как CTP не обновлял немецкие ресурсы, драйвер компилятора не смог загрузить сообщение об ошибке и приступить к сбою.

Обратите внимание, что это отличается от внутренней ошибки компилятора в интерфейсе или back-end или обычной ошибкой компилятора, которая неправильно выбрасывается. (Многие ICE и фиктивные ошибки были исправлены после освобождения CTP.)

Но даже после этого не существует ни std:: initializer_list, ни <initializer_list > заголовок доступен.

Установлен CTP <initializer_list > в специальном месте. (Это было написано командой компилятора.)

В командной строке заклинания использовать CTP и поставить <initializer_list > на пути включения (при условии расположения по умолчанию):

"C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\vcvarsall.bat" x86
set PATH=C:\Program Files (x86)\Microsoft Visual C++ Compiler Nov 2012 CTP\bin;%PATH%
set INCLUDE=C:\Program Files (x86)\Microsoft Visual C++ Compiler Nov 2012 CTP\include;%INCLUDE%

Попытка скомпилировать строку auto a = {0}; который критикуется IntelliSense

Это было задокументировано - Intellisense не обновлялся CTP, поэтому он не распознает какие-либо новые функции.

[rubenvb]

Стандартная библиотека С++ не была обновлена ​​компилятором, оставив вас без приличных <tuple> и <intializer_list > (это включает в себя отсутствие конструкторов списка заблокированных инициализаций для всех стандартных контейнеров)

Вам может быть интересно узнать, что мы обновили стандартную библиотеку для полной поддержки списков перечислений и списков инициализации. Это включает в себя все перегрузки initializer_list, заданные текущим рабочим документом (N3485), плюс установка <initializer_list > в обычном месте наряду со всеми другими стандартными заголовками. (Это также официальная копия Dinkumware, хотя различия между ней и "поддельной" версией команды компилятора были в основном косметическими.) Этот материал будет доступен в следующем публичном выпуске, когда бы и что бы это ни было. Наша следующая задача - обновить стандартную библиотеку с помощью явных операторов преобразования и вариативных шаблонов, заменив наше хрупкое моделирование.

Ответ 2

Как вы заметили, ноябрьский CTP очень ограничен в удобстве использования по крайней мере по двум причинам:

  • У компилятора есть многочисленные ошибки, вызывающие сбои, например, тот, который вы обнаружили.

  • Стандартная библиотека С++ не была обновлена ​​компилятором, оставив вас без достойных <tuple> и <intializer_list> (это включает в себя отсутствие конструкторов списка упрощенных инициализаций для всех стандартных контейнеров)

Также: связанный пример - очень уродливый код. Если вы хотите использовать эту функцию, используйте такой компилятор, как GCC или Clang, который поддерживает этот синтаксис. Они оба доступны для Windows. Взломать половину реализованной языковой функции, написав дополнительный код, просто глупо.