Why does MSVC++11 rejects constexpr qualification of a function?

橙三吉。 提交于 2019-12-10 00:35:04

问题


So, playing around with constexpr, MSVC (Visual Studio 2012) gave me an error while trying to qualify my function with the constexpr keyword using this simple program (includes omitted):

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 was underlined red with the following message:

Error : this declaration has no storage class or type specifier

and trying to compile the program gave the following output:

1>main.cpp(5): error C2144: syntax error : 'int' should be preceded by ';'

1>main.cpp(5): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int

It really puzzles me as it is the very example that Cppreference uses to illustrate the use of constexpr. At first I used a simple function that returned a literal, i.e. constexpr int func(){return 5;}, but which yielded the same error. I interpreted the first message as "it should be a member function of a struct or class", but the example from Cppreference shows that it's not necessary apparently.

So, what am I obviously missing here ?


回答1:


Quite simply - because Visual Studio doesn't support constexpr (prior to Visual Studio 2015).

Note that MSVC++11 is Visual Studio 2012; VC++10 is Visual Studio 2010.



来源:https://stackoverflow.com/questions/18513618/why-does-msvc11-rejects-constexpr-qualification-of-a-function

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!