Noticias

C++26 no pasó la votación final de ISO: los países rechazaron el borrador por los Contracts, algo que nunca le había pasado a C++

5 min de lectura

C++26 tendrá que esperar. La votación en la que los países miembros de ISO aprueban el borrador final del estándar, la llamada votación DIS, cerró el 22 de octubre sin la mayoría que hacía falta, y al día siguiente el resultado quedó como «Disapproved». Los comentarios de los países que votaron en contra apuntan a los Contracts, la función más polémica de esta versión. Según los miembros del comité, es la primera vez en la historia de C++ que un borrador final no pasa.

C++ no lo controla una empresa: lo define un estándar internacional de ISO que escribe un comité, el WG21, formado por expertos de compañías, universidades y fabricantes de compiladores. Cuando el comité termina una versión, la manda a votación de las National Bodies, los organismos de normalización de cada país, que pueden aprobarla, rechazarla o abstenerse, con comentarios. Para pasar hacen falta al menos dos tercios de votos a favor entre los países con voto y no más de una cuarta parte en contra. Hasta ahora era casi un trámite: las versiones anteriores salieron con apoyo prácticamente unánime. Si quieres repasar cómo llegó el lenguaje hasta aquí, tenemos una guía de las versiones de C++, de C++98 a C++26.

En marzo, en la reunión de Londres, el comité dio por terminado C++26 con 114 votos a favor, 12 en contra y 3 abstenciones. Era una versión grande: trae reflection (que el programa pueda examinar su propia estructura y generar código al compilar), mejoras de seguridad de memoria, std::execution como modelo común para la programación asíncrona y los Contracts. Estos últimos permiten escribir en el código lo que una función espera y lo que promete, con pre, post y contract_assert, y llevan más de veinte años de discusión: entraron en el borrador de C++20 y salieron en la misma reunión de 2019. Ni siquiera la versión de 2026 convenció a todos: Bjarne Stroustrup, el creador de C++, se opuso y dijo que se presenta como un producto mínimo viable cuando «no es mínimo ni es viable».

El camino de C++26 en ISO y dónde se atoró Borrador de trabajo WG21 junta las propuestas Borrador de comité (CD) los países lo comentan, 2025 Aprobado en WG21 Londres, marzo de 2026: 114 a 12 Votación DIS de los países cerró el 22 de octubre: rechazado Publicación como estándar en pausa Para aprobarse hacía falta al menos 2/3 de los países a favor y no más de 1/4 de los votos en contra Lo que puede pasar ahora Otra votación DIS con un borrador revisado Volver a borrador de comité la etapa CD Especificación técnica en vez de estándar Cancelar C++26 y seguir con C++23 WG21 se reúne en Búzios, Brasil, del 16 al 21 de noviembre. Fuentes: Herb Sutter, P4433R0, Andreas Fertig y Directivas ISO. Gráfica: decodigo.com.
Cómo se aprueba una versión de C++ en ISO y en qué paso se detuvo C++26. Gráfica: decodigo.com con datos de Herb Sutter, el documento P4433R0, Andreas Fertig y las Directivas de ISO.

Claves del rechazo

  • Un resultado sin precedentes. Andreas Fertig, miembro del comité que lleva el voto de Alemania, escribió que es el primer borrador final de C++ que falla. El único otro caso que encontró en ISO es el de C++/CLI, la variante de Microsoft para .NET, en 2006, y ese proyecto se abandonó.
  • No hay recuentos. ISO no publica cuántos países votaron en contra ni cuáles, así que solo se sabe que no se alcanzó la mayoría.
  • El motivo son los Contracts. Según Fertig, varios países consideran que la función no está lista. Él no está de acuerdo: «un paper nuevo con argumentos viejos no es información nueva para mí».
  • Hubo campaña. En septiembre, la C++ Alliance publicó el documento P4238, firmado entre otros por Vinnie Falco y Ville Voutilainen, en el que pedía a los países votar No con comentarios técnicos. Calculaba que el costo sería un ciclo de votación, «una demora de meses».
  • La respuesta de los autores. Dieciséis miembros del comité, entre ellos Timur Doumler y Joshua Berne, firmaron el documento P4433, en el que dicen que la oposición hizo cabildeo con los países con una versión parcial de los hechos. Recuerdan que WG21 adoptó los Contracts con 100 votos a favor y 14 en contra, y advierten que quitarlos no tomaría meses: obligaría a rehacer partes del estándar, como la biblioteca hardened.
  • Cuatro salidas. ISO permite someter un borrador revisado a otra votación DIS, devolverlo a la etapa de borrador de comité, publicarlo como especificación técnica en vez de estándar o cancelar C++26. Decide la presidencia del subcomité SC22 de ISO con la recomendación de WG21, y cualquiera de las cuatro implica retraso.
  • Reunión en Brasil. WG21 se reúne en Búzios, Río de Janeiro, del 16 al 21 de noviembre, y Fertig dice que la prioridad será romper el bloqueo. El documento P4433 propone otra votación sin tocar los Contracts.

Qué cambia para quien programa en C++

En el día a día, poco por ahora. Los compiladores no esperan a ISO: GCC, Clang y MSVC ya implementan partes de C++26 con opciones como -std=c++2c, y lo seguirán haciendo. Lo que se atrasa es el sello oficial, y con él la decisión de muchas empresas de adoptar la nueva versión, que suelen esperar a que el estándar se publique. El estándar vigente sigue siendo C++23, el que usa nuestro curso de C++ desde cero. El problema de fondo es otro: el comité funciona por consenso, y según los defensores de los Contracts, una minoría que perdió las votaciones internas logró frenar el estándar desde afuera; sus críticos responden que el consenso nunca existió y que la votación de los países sirve justo para eso. Si en Búzios se quitan los Contracts, sus defensores temen perder años de trabajo, como pasó en 2019; si se mantienen, los países podrían volver a votar en contra. Fertig incluso advierte que esto afectará a C++29, la siguiente versión.

Que C++26 salga más tarde no es grave para un lenguaje con más de cuarenta años. Lo delicado es que se rompió la confianza dentro del comité, justo cuando C++ está bajo presión para demostrar que puede ser un lenguaje seguro frente a alternativas como Rust. La reunión de noviembre dirá si el comité encuentra una salida o si el desacuerdo sigue.

Fuente: Andreas Fertig, «C++26 DIS failed, how does C++ survive?»; P4433R0; P4238R1; Herb Sutter.