C++26 incorpora #embed, una directiva de preprocesador que permite incrustar el contenido de un archivo binario —imágenes, certificados, configuraciones por defecto— directamente en el código fuente como una secuencia de expresiones constantes enteras, sin recurrir a herramientas externas como xxd, objcopy o scripts de generación de código. La propuesta P1967R14, impulsada por JeanHeyd Meneide, fue votada tras catorce revisiones y cinco años de trabajo, tras un primer intento fallido (P1040) que apostaba por una función constexpr.
La sintaxis básica reproduce lo que produciría xxd -i: const unsigned char icon[] = { #embed "icon.png" };. La directiva admite cuatro parámetros estándar inspirados en la sintaxis de atributos: limit, que restringe el número de bytes incrustados; prefix y suffix, que añaden tokens solo cuando el recurso no está vacío; e if_empty, que proporciona contenido alternativo cuando el archivo existe pero tiene tamaño cero. Como en el caso de __has_include, el comité introduce __has_embed, que permite comprobar antes de la inclusión si el recurso existe, está vacío o no se encuentra, devolviendo __STDC_EMBED_NOT_FOUND__, __STDC_EMBED_FOUND__ o __STDC_EMBED_EMPTY__.
En cuanto a soporte de compiladores, GCC 15 ofrece compatibilidad completa con -std=c++26; Clang 19+ lo implementa pero lo trata como extensión de C23, por lo que requiere -Wno-c23-extensions; MSVC aún no lo admite. Según los benchmarks de la propuesta, GCC incrusta un archivo de 100 MB en unos 1,3 segundos y 117 MiB de RAM, frente a los 139 segundos y 13 GiB que consume un encabezado equivalente generado con xxd. Con #embed, el recurso pasa a formar parte del código fuente: el compilador lo lee, el sistema de build no necesita intervenir y desaparece el riesgo de desfase entre el archivo original y el artefacto incrustado.
