constexpr没有在VC2013中编译

时间:2013-11-28 11:14:04

标签: c++ c++11 visual-studio-2013 constexpr

此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>------ Build started: Project: Project1, Configuration: Debug Win32 ------
    1>  Source.cpp
    1>....\source.cpp(3): error C2144: syntax error : 'int' should be preceded by ';'
    1>....\source.cpp(3): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
    ========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========

Herb Sutter在他的博客上提到了constexpr,但不清楚它的工作原理/工作原理是什么? http://herbsutter.com/2013/09/09/visual-studio-2013-rc-is-now-available/#comment-13521

4 个答案:

答案 0 :(得分:50)

Microsoft发布了一个C ++ 11兼容性表,constexprclearly marked as not being available in Visual Studio 2013

The November 2013 CTP有它。

来源: Google visual studio constexpr

答案 1 :(得分:9)

Visual Studio 2013 RTM不支持

constexpr,请参阅compatibility table。这不仅适用于RTM版本,也适用于Visual Studio更新。

如果您想坚持使用Visual Studio 2013,可以下载Visual C++ Compiler November 2013 CTP附带的一些新功能,请参阅MSDN blog。遗憾的是,微软没有与最新的Visual Studio Update功能和CTP功能合并,并明确指出他们不打算这样做。

如果我们想要一切,我们需要等待Visual Studio 2015,请参阅MSDN blog about VS 2015 Preview

答案 2 :(得分:3)

正如其他人所说,November 2013 Customer Technology Preview(CTP)会让您访问constexpr *

请注意,只需下载即可将“平台工具集”更改为“Visual C ++编译器2013年11月CTP(CTP_Nov2013)”以使用新编译器。您可以通过打开项目的“属性页”并转到:“配置属性”&gt;来实现。 “常规”,然后更改“平台工具集”。

*关于您实际可以访问constexpr的哪个部分,有一些相互矛盾的信息,但它绝对不是constexpr的所有标准定义。微软称{2013年11月CTP增加了here

  

constexpr支持(构造函数除外)

微软称其here包含:

  

constexpr(成员函数除外)

我甚至无法测试它是否支持成员函数,因为它肯定不支持任何类型的constexpr构造。例如,this code在2013年11月的CTP中出现此错误:

  

错误C2127:使用非常量表达式非法初始化'constexpr'实体

另外需要注意:在编写本文时,Visual Studio 2015 Preview仍然不支持constexpr构造。在最后的释放中保持我的手指交叉。

答案 3 :(得分:0)

您需要安装VS2013 Update 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