Rule A5-16-1 (required, implementation, automated)
The ternary conditional operator shall not be used as a sub-expression.
Rationale
Using the result of the ternary conditional operator as an operand or nesting conditional operators makes the code less readable and more difficult to maintain.
Example
// $Id: A5-16-1.cpp 289436 2017-10-04 10:45:23Z michal.szczepankiewicz $
#include <cstdint>
constexpr bool Fn1(std::int32_t x)
{
return (x > 0); // Compliant
}
std::int32_t Fn2(std::int32_t x)
{
std::int32_t i = (x >= 0 ? x : 0); // Compliant
std::int32_t j =
x + (i == 0 ? (x >= 0 ? x : -x) : i); // Non-compliant - nested
// conditional
operator
// and used as
a
// sub-expression
return (
i>0
? (j > 0 ? i + j : i)
: (j > 0 ? j : 0)); // Non-compliant - nested conditional operator
}
See also
HIC++ v4.0 [9]: 5.8.1 Do not use the conditional operator (?:) as a subexpression.