在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