EmVee
EmVee

Reputation: 81

Can the conditional operator ( ? : ) in C++ be compile time?

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;
}

Upvotes: 5

Views: 1659

Answers (2)

Nicol Bolas
Nicol Bolas

Reputation: 474116

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.

Upvotes: 9

Konrad Rudolph
Konrad Rudolph

Reputation: 545953

Yes, it absolutely can and in fact it could already be used in C++11 before the introduction of if constexpr, and even before C++11 in constant expressions, such as the one in your question.

Upvotes: 2

Related Questions