问题
I have following code
static constexpr bool condition = true;
int square(int num) {
if constexpr (condition) {
return num * num;
} else {
x
return num;
}
}
int main() {
return square(3);
}
compiled with
-std=gnu++17
My assumption for
if constexpr (condition)
was that during compilation the part
} else {
x
return num;
}
get discarded and I get no error about the undefined
x
Is my understanding wrong that this 'if constexpr' is something like
#ifdef CONDITION
return num * num;
#else
x
return num;
#endif
How do I modify this code that I can compile this?
Thanks for the help
回答1:
How do I modify this code that I can compile this?
To fix your code, simply remove the line with x
.
Is my understanding wrong that this 'if constexpr' is something like [...]
Yes, your understanding is wrong. From cppreference:
Outside a template, a discarded statement is fully checked.
if constexpr
is not a substitute for the#if
preprocessing directive.
This means every branch in an if constexpr
block must be valid C++, even if it's never going to be used.
来源:https://stackoverflow.com/questions/58300760/wrong-understanding-of-if-constexpr