¿Está unsigned char siempre promovido a int?

Supongamos lo siguiente:

unsigned char foo = 3;
unsigned char bar = 5;

unsigned int shmoo = foo + bar;

Sonfoo ybar Valores garantizados para ser promovidos aint Valores para la evaluación de la expresión.foo + bar - ¿O se les permite a las implementaciones promoverlas aunsigned int?

Ensección 6.2.5 párrafo 8:

Para cualquiera de los dos tipos de enteros con la misma signatura y diferente rango de conversión de entero (ver 6.3.1.1), el rango de valores del tipo con menor rango de conversión de entero es un subrango de los valores del otro tipo.

Ensección 6.2.5 párrafo 9:

Si unaint puede representar todos los valores del tipo original, el valor se convierte en unint; De lo contrario, se convierte en ununsigned int.

La garantía de que un tipo de entero con un rango de conversión de entero más pequeño tiene un rango de valores que es un subrango de los valores del otro tipo parece depender de lafirmeza del tipo entero.

signed char corresponde asigned intunsigned char corresponde aunsigned int

¿Significa esto que el valor de unaunsigned char Solo se garantiza estar en el subgrupo deunsigned int y no necesariamenteint? Si es así, ¿eso implica que una implementación podría tener teóricamente unaunsigned char valor que no está en el subrango de unaint?

Respuestas a la pregunta(2)

Su respuesta a la pregunta