El complemento bit a bit de true en C++ se evalúa como true porque primero se promueve el valor bool a int, se le aplica el complemento obteniendo –2, y luego se vuelve a convertir a bool mediante la conversión booleana: cualquier valor distinto de cero se convierte en true. Esta regla sencilla falla para los enums con ámbito cuyo tipo subyacente es bool, donde gcc trunca incorrectamente el resultado en lugar de aplicar la conversión booleana, mientras que Clang y MSVC siguen el estándar. Además, los enums sin ámbito y sin un tipo subyacente fijo pueden presentar un comportamiento indefinido al volver a convertir el valor complementado al tipo enum.
Leer el artículo completo →