El cambio de u8 a char8_t rompe la compatibilidad en C++20

Fuentes: C++20's u8 to char8_t Change Breaks Backward Compatibility

El estándar C++20 introduce una ruptura de compatibilidad hacia atrás al modificar el tipo de los literales de cadena con el prefijo u8. En las versiones anteriores, como C++17, estos literales se interpretaban como arrays de const char, mientras que en C++20 se convierten en arrays de const char8_t. Este cambio técnico provoca que el código que compilaba correctamente en versiones anteriores falle al actualizar al nuevo estándar, ya que las funciones que esperan un puntero a char no pueden aceptar un puntero a char8_t.

El artículo detalla cómo este cambio afecta a bases de código existentes y bibliotecas, donde el código que funcionaba en C++17 deja de compilar al migrar a C++20. El error común es intentar mantener la sintaxis u8 sin ajustar la firma de las funciones, lo que genera errores de conversión de tipos en compiladores como MSVC. Para mitigar este problema, la guía de estilo de Google recomienda evitar el uso del prefijo u8 cuando sea posible, ya que sus semánticas difieren significativamente entre C++17 y C++20, y se espera que cambien nuevamente en C++23. Esta recomendación busca prevenir errores de compilación en proyectos que dependen de la estabilidad de las interfaces de strings en el estándar.