¿Cómo funcionan las reglas de promoción cuando la firma en ambos lados de un operador binario difiere? [duplicar

Esta pregunta ya tiene una respuesta aquí:

Reglas de conversión de tipo implícito en operadores C ++ 9 respuestas

Considere los siguientes programas:

// http://ideone.com/4I0dT
#include <limits>
#include <iostream>

int main()
{
    int max = std::numeric_limits<int>::max();
    unsigned int one = 1;
    unsigned int result = max + one;
    std::cout << result;
}

// http://ideone.com/UBuFZ
#include <limits>
#include <iostream>

int main()
{
    unsigned int us = 42;
    int neg = -43;
    int result = us + neg;
    std::cout << result;
}

¿Cómo "sabe" el operador + cuál es el tipo correcto para devolver? La regla general es convertir todos los argumentos al tipo más amplio, pero aquí no hay un "ganador" claro entreint yunsigned int. En el primer caso,unsigned int debe ser elegido como resultado deoperator+, porque obtengo un resultado de2147483648. En el segundo caso, debe elegirint, porque obtengo un resultado de-1. Sin embargo, no veo en el caso general cómo esto es decidible. ¿Es este comportamiento indefinido lo que veo o algo más?

Respuestas a la pregunta(3)

Su respuesta a la pregunta