39

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 Answer 1

39

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.

Sign up to request clarification or add additional context in comments.

6 Comments

Oh, didn't think of that... Thanks for pointing it out ! I'll keep that link, and accept asap. I don't understand the downvote though...
I think this is a reasonable question containing the code that didn't work, what you expected it to do, and the error you were getting.
I agree, the question's fine. In fact, I'll just go and upvote it myself.
@Chowlett: Keep us informed! :)
Just a small note: the link in the answer still says that MSVC doesn't support constexpr, but since the Visual C++ Compiler November 2013 CTP, MSVC++12 now supports it partly (still not supported for member functions).
|

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.