8

我想像这个例子std::initializer_list中的一个人一样在 Visual Studio 2012中使用s 。我的操作系统是 Windows 8 x64。

因此,我最近安装了Visual C++ 编译器 2012 年 11 月 CTP,正如微软所说,我更改了项目的平台工具集以使用新的更新编译器。

但即使这样做了,也没有可用std::initializer_list<initializer_list>标头。但是微软的链接网站告诉我(在标题“概述”下)初始化列表将随该更新提供。我重新启动了 IDE 和我的 PC。我不确定这是否可能是由于我(遗憾地)使用德文版的 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. 没有任何新语法,一切都可以编译并在所选的新编译器下正常工作。

4

2 回答 2

25

(我为 Microsoft 工作并与 Dinkumware 一起维护 VC 的标准库实现。)

[丹尼哈尔]

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

不幸的是,只有英文的 CTP 不支持德文 VS。

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

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

但即使这样做了,也没有可用的 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 批评

这已记录在案 - CTP 未更新 Intellisense,因此它不会识别任何新功能。

[rubenvb]

C++ 标准库没有用编译器更新,让你没有像样的 <tuple> 和 <intializer_list> (这包括所有标准容器的括号初始化列表构造函数的省略)

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

于 2013-01-28T22:01:21.807 回答
3

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

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

  2. C++ 标准库没有用编译器更新,让你没有像样的<tuple><intializer_list>(这包括所有标准容器的括号初始化列表构造函数的省略)

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

于 2013-01-28T18:21:53.767 回答