Como os tipos inteiros são convertidos implicitamente?

O código a seguir falha em uma verificação MISRA. A mensagem de erro concreta é:

(MISRA-C: 2004 10.1 / R) O valor de uma expressão do tipo inteiro não deve ser implicitamente convertido em um tipo subjacente diferente se não for uma conversão para um tipo inteiro mais amplo da mesma assinatura

<code>typedef enum _MyEnum { One, Two } MyEnum;
MyEnum MyVariable;

int foo(void)
{
    int result = 1;

    if (One == MyVariable)  // fails here with MISRA-C:2004 10.1/R
    {
        result = 2;
    }    
    return result;
}
</code>
Por que a expressão lógica é convertida?O que é convertido aqui?Por que o código passa a verificação MISRA, quando eu trocarOne eMyVariable?

Editar: O compilador é um TI "MSP430 C / C ++ Compiler v4.0.0" com verificação de regras MISRA incluída.

questionAnswers(3)

yourAnswerToTheQuestion