在Visual C ++编译器2012年11月CTP中使用std :: initializer_list

时间:2013-01-28 10:14:44

标签: c++ visual-c++ c++11 visual-studio-2012 initializer-list

我想像this example中的人一样在Visual Studio 2012中使用std::initializer_list。我的操作系统是Windows 8 x64。

因此我最近安装了Visual C++ Compiler November 2012 CTP并且正如Microsoft所提到的,我更改了项目的平台工具集以使用新的更新编译器。

但即使这样做,也没有可用的std::initializer_list<initializer_list>标头。但微软的链接网站告诉我(在标题“概述”下)初始化程序列表可用于该更新。我重新启动了IDE和我的电脑。我不确定是否可能是因为我(遗憾地)使用德语版的Visual Studio并且编译器更新是英文的。我做错了什么?

更新:尝试编译被IntelliSense批评的行auto a = { 0 };,编译器输出显示'Microsoft Visual C++ Compiler Nov 2012 CTP' is for testing purposes only.,然后编译器崩溃,并出现一个读取Microsoft (R) C/C++ Compiler Driver has stopped working的错误窗口。没有任何新语法,一切都可以编译,并且可以选择新的编译器。

2 个答案:

答案 0 :(得分:24)

(我为Microsoft和Dinkumware工作,以维护VC的标准库实现。)

[danijar]

  

我不确定是否可能是由于我(遗憾地)使用德语版的Visual Studio并且编译器更新是英文的。

不幸的是,仅限英语的CTP不支持德语VS。

&#34;编译器驱动程序&#34; cl.exe调用编译器前端c1xx.dll,编译器后端c2.dll和链接器link.exe。编译器驱动程序崩溃是非常不寻常的。我推测它试图显示由CTP添加的错误消息之一,但由于CTP没有更新德语资源,编译器驱动程序无法加载错误消息,继续崩溃。

请注意,这与前端或后端的内部编译器错误或发生错误发出的正常编译器错误不同。 (CTP发布后,许多ICE和虚假错误已得到修复。)

  

但即便这样做,也没有std :: initializer_list和&lt; initializer_list&gt;标题可用。

安装的CTP&lt; initializer_list&gt;在一个特殊的位置。 (它实际上是由编译器团队编写的。)

在命令行上,使用CTP并放置&lt; initializer_list&gt;的咒语在include路径上是(假设默认位置):

"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%
  

尝试编译自动行a = {0};这被IntelliSense批评

记录了这一点--CTP没有更新Intellisense,因此它无法识别任何新功能。

[rubenvb]

  

C ++标准库没有使用编译器进行更新,没有像样的&lt; tuple&gt;和&lt; intializer_list&gt; (这包括省略所有标准容器的支撑初始化列表构造函数)

您可能有兴趣了解我们已更新标准库以完全支持范围内的枚举和初始化列表。这包括当前工作文件(N3485)规定的所有initializer_list重载,以及安装&lt; initializer_list&gt;在通常的位置以及所有其他标准标题。 (它也是Dinkumware的官方副本,虽然它与编译器团队的#34;假冒版本之间的差异大部分是装饰性的。)这些东西将在下一个公开发布中提供,无论何时何地。我们的下一个任务是使用显式转换运算符和可变参数模板更新标准库,替换我们的脆弱模拟。

答案 1 :(得分:3)

正如您所注意到的,11月CTP的可用性非常有限,至少有两个原因:

  1. 编译器有许多导致崩溃的错误,例如您发现的错误。

  2. C ++标准库未使用编译器进行更新,使您没有合适的<tuple><intializer_list>(这包括省略 all all 标准容器)

  3. 另外:链接的示例代码非常难看。如果要使用此功能,请使用支持此语法的编译器,如GCC或Clang。它们都可用于Windows。通过编写额外代码来破解半实现的语言功能只是愚蠢。