Etiquetó su pregunta [C] y [C ++] al mismo tiempo. Los resultados serán consistentes entre los idiomas, pero la estructura de la respuesta es diferente para cada uno de estos idiomas.
En lenguaje C, sus ejemplos no tienen ninguna relación con booleso (eso también se aplica a C99). En lenguaje C, los operadores relacionales no producen boolresultados. Ambos 4 > 5y 4 < 5son expresiones que producen resultados de tipo intcon valores 0o 1. Por lo tanto, no hay "conversión de bool a int" de ningún tipo en sus ejemplos en C.
En C ++, los operadores relacionales sí producen boolresultados. boollos valores son convertibles a inttipo, con trueconversión a 1y falseconversión a 0. Esto está garantizado por el idioma.
El lenguaje PS C también tiene un tipo booleano dedicado _Bool(macro-alias como bool), y sus reglas de conversión integral son esencialmente las mismas que en C ++. Sin embargo, esto no es relevante para sus ejemplos específicos en C. Una vez más, los operadores relacionales en C siempre producen int(no bool) resultados independientemente de la versión de la especificación del lenguaje.
assert(x!=0). Incluso si bool (true) convierte portable a int (1), las afirmaciones "no falsas" tienen una expresión más legible.