V556. The values of different enum types are compared

01.06.2012

The analyzer detected a potential error: code contains comparison of enum values which have different types.

Consider a sample:

enum ErrorTypeA { E_OK, E_FAIL };
enum ErrorTypeB { E_ERROR, E_SUCCESS };
void Foo(ErrorTypeB status) {
  if (status == E_OK)
  { ... }
}

The programmer used a wrong name in the comparison by accident, so the program's logic is disrupted. This is the correct code:

void Foo(ErrorTypeB status) {
   if (status == E_SUCCESS)
  { ... }
}

Comparison of values of different enum types is not necessarily an error, but you must review such code.

You can look at examples of errors from real projects which were detected by this diagnostic message.