In the following program, I have added an explicit return
statement in func()
, but the compiler gives me the following error:
m.cpp: In function ‘constexpr int func(int)’:
m.cpp:11:1: error: body of constexpr function ‘constexpr int func(int)’ not a return-statement
}
This is the code:
#include <iostream>
using namespace std;
constexpr int func (int x);
constexpr int func (int x)
{
if (x<0)
x = -x;
return x; // An explicit return statement
}
int main()
{
int ret = func(10);
cout<<ret<<endl;
return 0;
}
I have compiled program in a g++ compiler using the following command.
g++ -std=c++11 m.cpp
I have added return
statement in function, then Why I got above error?
C++11's constexpr
functions are more restrictive than that.
From cppreference:
the function body must be either deleted or defaulted or contain only the following:
- null statements (plain semicolons)
static_assert
declarations
typedef
declarations and alias declarations that do not define classes or enumerations
using
declarations
using
directives
- exactly one
return
statement.
So you can say this instead:
constexpr int func (int x) { return x < 0 ? -x : x; }
static_assert(func(42) == 42, "");
static_assert(func(-42) == 42, "");
int main() {}
Note that this restriction was lifted in C++14.
Prior to C++14, the body of a constexpr
function must consist solely of a return
statement: it cannot have any other statements inside it. This works in C++11 :
constexpr int func (int x)
{
return x < 0 ? -x : x;
}
In C++14 and up, what you wrote is legal, as are most other statements.
Source.