在VC2013中不能编译
此Constexpr代码不在Visual Studio 2013版本12.0.21005.1 REL中编译
是否有一个新的Visual Studio编译器与constexpr一起工作?
#include <iostream> constexpr int factorial(int n) { return n <= 1 ? 1 : (n * factorial(n - 1)); } int main(void) { const int fact_three = factorial(3); std::cout << fact_three << std::endl; return 0; }
编译输出:
1> ------开始生成:Project:Project1,configuration:Debug Win32 ------ 1> Source.cpp 1> .... \ source.cpp(3):错误C2144:语法错误:'int'应该以';'开始 1> .... \ source.cpp(3):错误C4430:缺lesstypes说明符 - 假定为int。 注意:C ++不支持default-int ==========构build:0成功,1失败,0最新,0跳过==========
Herb Sutter在他的博客上提到了constexpr,但是它的工作版本还不清楚。 http://herbsutter.com/2013/09/09/visual-studio-2013-rc-is-now-available/#comment-13521
微软发布了一个C ++ 11兼容性表,在这个表下constexpr
被明确标记为在Visual Studio 2013中不可用 。
虽然2013年11月CTP有。
来源:谷歌visual studio constexpr
Visual Studio 2013 RTM不支持constexpr
,请参阅兼容性表 。 这不仅适用于RTM版本,也适用于Visual Studio更新。
如果您想坚持使用Visual Studio 2013,可以下载带有一些新function的2013年11月的Visual C ++编译器CTP ,请参阅MSDN博客 。 不幸的是,微软没有与最新的Visual Studio更新function和CTPfunction合并,并明确表示他们不打算这样做。
如果我们想要这一切,我们需要等待Visual Studio 2015,请参阅有关VS 2015 Preview的MSDN博客 。
正如其他人所提到的, 2013年11月客户技术预览(CTP)将使您能够访问constexpr
*
请注意,只需下载,您就需要将“平台工具集”更改为“Visual C ++编译器2013年11月CTP(CTP_Nov2013)”以使用新的编译器。 你可以通过打开项目的“属性页”来完成,然后进入:“configuration属性”>“常规”,然后更改“平台工具集”。
*您实际访问的constexpr
部分信息存在一些冲突的信息,但绝对不是constexpr
全部标准定义。 微软在这里说,2013年11月的CTP增加了:
constexpr
支持(构造函数除外)
微软在这里说,它包含:
constexpr
(会员function除外)
我甚至不能testing它是否支持成员函数,因为它绝对不支持任何types的constexpr
构造。 例如, 这段代码在2013年11月的CTP中给出了这个错误:
错误C2127:使用非常量expression式“constexpr”实体的非法初始化
另外一个注意事项:在编写Visual Studio 2015 Preview时,仍然不支持constexpr
构造。 保持我的手指越过最后的版本。
您需要安装VS2013更新5.(我在更新3,它不工作)关于“2013年11月CTP”的事情是不适用的,截至撰写本文。 你可以去这里: https : //my.visualstudio.com
并要下载,或者: https : //my.visualstudio.com/Downloads?q=visual%20studio%202013&wt.mc_id= o~msft~vscom~older-downloads