Can the ternary (conditional) operator be used as an analogous to constexpr if()
, introduced in C++17?
I would like to add some conditionality to member variables initialization in a template. Would the following expression resolve at compile time or runtime? If so, is there any other operator that resolves at compile time such that template specialisation can be avoided?
template<int a>
struct hello {
constexpr static int n = (a != 0) ? 10 : 20;
}
It depends on what you mean by "analogous to constexpr if()
". if constexpr
requires that the condition is a constant expression. It also has certain privileges in template code to discard the branches not taken.
?:
does not have that functionality.
However ?:
can appear in constant expressions just fine, and it always could. It doesn't make an expression non-constant.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With