¿Hay alguna manera de protegerse contra el código binario resultante del código en this question? Idealmente por medio de un error en tiempo de compilación. Código de ejemplo de la pregunta:¿Hay alguna manera de provocar un error de compilación si intenta asignar un número negativo a un contenedor sin firmar?
unsigned int nVal = 0;
nVal = -5; // no error!
'compiler error' at runtime? * La asignación * ocurre en tiempo de ejecución. – Nawaz
Puede haber una forma de explotar reglas de conversión complicadas, pero significaría cambiar su código para que ya no use 'unsigned int', sino algo así como' EnforcedUnsignedInt' con otras clases intermedias para causar una generación de código diferente cuando se usa 'operator = 'con firmado/sin firmar. Veredicto: no es práctico/realista. – tenfour
La asignación inicial de '0' (que está firmada), en lugar de' 0u', presumiblemente también generaría la advertencia/error que desea. –