Использование std::initializer_list в компиляторе Visual C++, ноябрь 2012 г., CTP

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

Поэтому я недавно установил CTP Visual C++ Compiler, ноябрь 2012 г. и, как упоминалось в 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. Без какого-либо нового синтаксиса все компилируется и работает нормально с выбранным новым компилятором.


person danijar    schedule 28.01.2013    source источник


Ответы (2)


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

[данияр]

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

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

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

Обратите внимание, что это отличается от внутренней ошибки компилятора во внешнем или внутреннем интерфейсе или от обычной ошибки компилятора, которая возникает неправильно. (Многие 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]

Стандартная библиотека C++ не была обновлена ​​компилятором, что оставило вас без приличных ‹tuple› и ‹initializer_list› (включая отсутствие конструкторов списков инициализации в фигурных скобках для всех стандартных контейнеров).

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

person Stephan T. Lavavej    schedule 28.01.2013
comment
Поскольку было два обновления для MSVS2012, мне интересно, что стало с ноябрьским обновлением компилятора CTP. Если вы уже внедрили модификации STL, почему они еще не выпущены для нас? - person rubenvb; 07.04.2013

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

  1. В компиляторе есть множество ошибок, приводящих к сбоям, например обнаруженная вами.

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

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

person rubenvb    schedule 28.01.2013