我想在 Visual Studio 2012 中使用
std::initializer_list
,就像 这个示例 中的人一样。我的操作系统是 Windows 8 x64。
因此我最近安装了 Visual C++ 编译器 2012 年 11 月 CTP 并且正如 Microsoft 提到的,我更改了项目的平台工具集以使用新更新的编译器。
但即使这样做之后,也没有
std::initializer_list
和 <initializer_list>
标头可用。但微软的链接网站告诉我(在标题“概述”下)该更新将提供初始化程序列表。我重新启动了 IDE 和 PC。我不确定这是否是由于我(遗憾地)使用德语版的 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
。无需任何新语法,一切都可以在所选的新编译器下编译并正常工作。
(我在 Microsoft 工作并与 Dinkumware 一起维护 VC 的标准库实现。)
我不确定这是否可能是由于我(遗憾地)使用德语版的 Visual Studio 而编译器更新是英文的。
不幸的是,纯英语的CTP不支持德语VS。
“编译器驱动程序”cl.exe 调用编译器前端 c1xx.dll、编译器后端 c2.dll 和链接器 link.exe。编译器驱动程序崩溃的情况非常罕见。我推测它正在尝试显示 CTP 添加的错误消息之一,但由于 CTP 没有更新德语资源,因此编译器驱动程序无法加载错误消息并继续崩溃。
请注意,这与前端或后端的内部编译器错误或恰好错误发出的正常编译器错误不同。 (CTP发布后,许多ICE和虚假错误已得到修复。)
但是即使这样做了,也没有 std::initializer_list 和
标头可用。
CTP 安装在特殊位置。 (实际上是编译团队写的。)
放在包含路径上的咒语是(假设默认位置):
"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++ 标准库未随编译器更新,导致您没有像样的您可能有兴趣了解我们已经更新了标准库以完全支持作用域枚举和初始值设定项列表。这包括当前工作论文 (N3485) 强制要求的所有initializer_list 重载,以及在常用位置安装和
(这包括省略所有标准容器的大括号 init 列表构造函数)
以及所有其他标准标头。 (它也是 Dinkumware 的官方副本,尽管它与编译器团队的“假”版本之间的差异主要是表面上的。)这些东西将在下一个公开版本中提供,无论何时何地。我们的下一个任务是使用显式转换运算符和可变参数模板更新标准库,取代我们脆弱的模拟。
<tuple>
和
<intializer_list>
(这包括省略all 标准容器的大括号 init 列表构造函数)