为什么MSVC ++ 11拒绝函数的constexpr限定?

所以,玩弄constexpr,MSVC(Visual Studio 2012)给了我一个错误,而试图使用这个简单的程序(包括省略)与constexpr关键字限定我的function:

 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; } 

constexpr被强调为红色并带有以下信息:

错误:此声明没有存储类或types说明符

并试图编译该程序给出了以下输出:

1> main.cpp(5):错误C2144:语法错误:'int'应该以';'开头

1> main.cpp(5):错误C4430:缺lesstypes说明符 – int假定。 注意:C ++不支持default-int

它真的令我困惑,因为它是Cppreference 用来说明constexpr的使用的一个例子。 起初,我用一个简单的函数返回一个文字,即constexpr int func(){return 5;} ,但是产生了相同的错误。 我将第一条消息解释为“它应该是一个结构或类的成员函数”,但Cppreference的例子显示它不是必要的。

那么,我显然在这里错过了什么?

很简单 – 因为Visual Studio不支持constexpr (在Visual Studio 2015之前)。

请注意,MSVC ++ 11是Visual Studio 2012; VC ++ 10是Visual Studio 2010。