A conditional expression is a compound expression
that contains a condition that is implicitly converted
to type `bool` in C++(operand_{1}), an expression to be evaluated if the condition evaluates to
true (operand_{2}), and an
expression to be evaluated if the condition has the value false (operand_{3}).

The conditional expression contains one two-part operator. The `?` symbol
follows the condition, and the `:` symbol appears between the two
action expressions. All expressions that occur between the `?` and `:` are treated as one expression.

The first operand must have a scalar type. The type of the second and third operands must be one of the following:

- An arithmetic type
- A compatible pointer, structure, or union type
- void

The second and third operands can also be a pointer or a null pointer constant.

Two objects are compatible when they have the same type but not necessarily
the same type qualifiers (`volatile` or `const`). Pointer
objects are compatible if they have the same type or are pointers to void.

The first operand is evaluated, and its value determines whether the second or third operand is evaluated:

- If the value is true, the second operand is evaluated.
- If the value is false, the third operand is evaluated.

The result is the value of the second or third operand.

If the second and third expressions evaluate to arithmetic types, the usual arithmetic conversions are performed on the values. The types of the second and third operands determine the type of the result as shown in the following tables.

Conditional expressions have right-to-left associativity with respect to their first and third operands. The leftmost operand is evaluated first, and then only one of the remaining two operands is evaluated. The following expressions are equivalent:

a ? b : c ? d : e ? f : g a ? b : (c ? d : (e ? f : g))