# V699. It is possible that 'foo = bar == baz ? .... : ....' should be used here instead of 'foo = bar = baz ? .... : ....'. Consider inspecting the expression.

The analyzer has detected an expression of the 'foo = bar = baz ? xyz : zzy' pattern. It is very likely to be an error: the programmer actually meant it to be 'foo = bar == baz ? xyz : zzy' but made a mistake causing the code to do assignment instead of comparison.

For example, take a look at the following incorrect code fragment:

    int newID = currentID = focusedID ? focusedID : defaultID;

The programmer made a mistake writing an assignment operator instead of comparison operator. The fixed code should look like this:

    int newID = currentID == focusedID ? focusedID : defaultID;

Note that the code below won't trigger the warning because the expression before the ternary operator is obviously of the bool type, which makes the analyzer assume it was written so on purpose.

    result = tmpResult = someVariable == someOtherVariable? 1 : 0;

This fragment is quite clear. It is equivalent to the following lengthier one:

    if (someVariable == someOtherVariable)
      tmpResult = 1;
    else
      tmpResult = 0;
    result = tmpResult;

This diagnostic is classified as:

CWE-481 CERT-EXP45-C