C++26 da un paso más en la trayectoria de expansión de constexpr, la palabra clave que permite evaluar expresiones en tiempo de compilación. La propuesta P3533R2, autoría de Hana Dusíková, levanta una de las últimas restricciones sintácticas: la prohibición de declarar constexpr los constructores y destructores de tipos con herencia virtual. Hasta ahora, el estándar vetaba esas funciones y compiladores como Clang incluso rechazaban cualquier método miembro de esas jerarquías.
La herencia virtual existe para resolver el llamado problema del diamante, en el que una clase derivada hereda de dos subclases de una misma base y acaba con dos copias de ella, generando ambigüedad. Marcar las herencias como virtuales obliga al compilador a mantener una única instancia compartida de la base, a costa de punteros adicionales en la tabla virtual y reglas de construcción más complejas.
El cambio tiene consecuencias prácticas inmediatas. std::ios_base, la base de toda la jerarquía de flujos de iostream, recurre a la herencia virtual, lo que bloqueaba hacer streams compatibles con constexpr. Esa limitación arrastraba a otras piezas de la biblioteca estándar: los tipos de excepción de que necesitan formateo con streams, o la tan ansiada constexpr-ización de basic_istream_view para el parseo en tiempo de compilación dentro de rangos.
Además, la propuesta vacía de contenido el concepto de función «constexpr-suitable», que únicamente excluía corutinas. Una vez P3367R0 las aborde en C++29, todo será constexpr per se y el término dejará de tener sentido. El lenguaje converge así hacia un modelo donde solo las propiedades de evaluación del código — definidas en [expr.const] — deciden qué puede evaluarse en compilación.
