C++26 reduce el comportamiento indefinido en el núcleo del lenguaje

Fuentes: C++26: Reducing undefined behaviour

C++26 marca un avance significativo en seguridad del lenguaje. El comité ha abordado la reducción del comportamiento indefinido (UB) tanto en el núcleo del lenguaje como en la biblioteca estándar. La propuesta P3144R2 convierte en error de compilación la eliminación de un puntero a un tipo incompleto, una práctica que antes era UB salvo en casos con destructor trivial. El comité descartó la vía de la desprecation y optó por la opción más valiente, ya que los principales compiladores ya advertían de este patrón. P2795R5 introduce el concepto de comportamiento erróneo: leer una variable local no inicializada deja de ser UB y pasa a estar bien definido, aunque conceptualmente incorrecto, inicializándose a un valor dependiente de la implementación; el atributo [[indeterminate]] permite mantener la semántica antigua cuando se busca rendimiento. P2748R5 prohíbe en compilación vincular una referencia devuelta a un temporal, eliminando una fuente clásica de referencias colgantes. En el ámbito de la biblioteca, P3471R4 estandariza el endurecimiento (hardening): las precondiciones violadas en contenedores como std::vector, std::span, std::optional o std::expected pueden abortar el programa en tiempo de ejecución, sin cambios de código y con una sobrecarga aproximada del 0,3%. El conjunto convierte patrones peligrosos en errores detectables en compilación o ejecución, mejorando la fiabilidad del ecosistema C++.