constexpr未在VC2013中编译
constexpr not compiling in 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>------开始生成:项目:Project1,配置:调试Win32------1> 来源.cpp1> 。。。。\source.cpp(3):错误C2144:语法错误:"int"前面应加";"1> 。。。。\source.cpp(3):错误C4430:缺少类型说明符-假定为int。注意:C++不支持默认的int==========生成:0成功,1失败,0最新,0跳过==========
Herb Sutter在他的博客上提到了constexpr,但不清楚它在哪个版本有效/将有效?http://herbsutter.com/2013/09/09/visual-studio-2013-rc-is-now-available/#comment-13521
Microsoft发布了一个C++11兼容性表,其中constexpr
被明确标记为在Visual Studio 2013中不可用。
不过,2013年11月的CTP有它。
来源:Google visual studio constexpr
constexpr
在Visual Studio 2013 RTM中不受支持,请参阅兼容性表。这不仅适用于RTM版本,也适用于Visual Studio更新。
如果你想坚持使用Visual Studio 2013,你可以下载Visual C++编译器2013年11月的CTP,它附带了一些新功能,请参阅MSDN博客。不幸的是,微软没有与最新的Visual Studio更新功能和CTP功能合并,并明确表示他们不打算这样做
如果我们想要这一切,我们需要等待Visual Studio 2015,请参阅MSDN关于VS 2015预览版的博客。
正如其他人所提到的,2013年11月客户技术预览版(CTP)将允许您访问constexpr
*
请注意,只需下载,您就需要将"平台工具集"更改为"Visual C++编译器2013年11月CTP(CTP_Nov2013)"才能使用新编译器。您可以打开项目的"属性页",转到:"配置属性">"常规",然后更改"平台工具集"。
*关于您实际可以访问constexpr
的哪些部分,有一些相互矛盾的信息,但这绝对不是constexpr
的所有标准定义。微软在这里说,2013年11月的CTP增加了:
constexpr
支持(建设者除外)
微软在这里说它包含:
constexpr
(成员功能除外)
我甚至无法测试它是否支持成员函数,因为它肯定不支持任何类型的constexpr
构造。例如,此代码在2013年11月的CTP:中给出了此错误
错误C2127:使用非常量表达式非法初始化"constexpr"实体
另请注意:在撰写本文时,Visual Studio 2015预览版仍然不支持constexpr
构造。我一直在为最后的发行祈祷。
您需要安装VS2013 Update 5。(我在更新3,但它不起作用)关于";2013年11月CTP";截至本文撰写之时不适用。您可以通过以下方式进行操作:https://my.visualstudio.com
然后下载,或者:https://my.visualstudio.com/Downloads?q=visual%20studio%202013