C++26 define bucles infinitos triviales como comportamiento definido

Fuentes: C++26 defines trivial infinite loops as well-defined behavior

C++26 corrige una ambigüedad en el estándar que clasificaba como comportamiento indefinido (UB) los bucles infinitos triviales, como while (true);. Esta modificación, respaldada por la propuesta P2809R3, establece que estos bucles son ahora bien definidos, lo que impide que los compiladores los optimicen o eliminen por completo. El cambio surge de la necesidad de resolver una divergencia con C, donde los bucles con expresiones constantes siempre se consideraban definidos, y de la realidad práctica en sistemas embebidos, donde estos bucles se usan para detener el hardware ante errores fatales. Antes de esta actualización, la eliminación del bucle podía causar que la ejecución cayera en código no deseado, comprometiendo la seguridad y la estabilidad del sistema. La nueva regla define un bucle trivial como aquel con un cuerpo vacío y una condición constante que evalúa a true, reemplazándolo por std::this_thread::yield(). Esta solución preserva la semántica de progreso hacia adelante sin introducir comportamientos no deseados en sistemas sin sistema operativo, garantizando que el hardware se detenga correctamente en lugar de continuar en un estado corrupto.