Soporte de módulos C++20 de Apple Clang 13 faltante.
Según la documentación oficial, Clang 13 soporta los módulos de C++20 a través del parámetro de línea de comando -fmodules
.
No puedo compilar ni siquiera un módulo básico con Clang 13 (macOS Monterey) en un Mac basado en Intel o M1.
Suponiendo el siguiente contenido de texto del archivo module.cpp
:
export module a;
export int f(int a, int b) {
return a + b;
}
Ejecutando lo siguiente:
$ clang++ --version
versión de Apple clang 13.0.0 (clang-1300.0.29.3)
Objetivo: x86_64-apple-darwin21.1.0
$ clang++ -std=c++20 -stdlib=libc++ -fmodules -fbuiltin-module-map -c module.cpp
module.cpp:1:8: error: se esperaba una plantilla
export module a;
^
module.cpp:1:8: error: nombre de tipo desconocido 'module'
module.cpp:3:8: error: se esperaba una plantilla
export int f(int a, int b) {
^
3 errores generados.
Probado con resultados idénticos en un chip ARM M1:
$ clang++ --version
versión de Apple clang 13.0.0 (clang-1300.0.29.3)
Objetivo: arm64-apple-darwin21.1.0
¿Hay alguna otra forma de hacer funcionar los módulos O hay alguna limitación no documentada de los módulos de C++20 con Apple Clang 13?
Nota: compilar con la bandera experimental -fmodules-ts
funciona.
davy.ai
Problemas con Clang 13 y Módulos C++20 en Apple M1
Según la documentación oficial, Clang 13 debería admitir los Módulos C++20 con el uso del parámetro de línea de comandos ” -fmodules “. Sin embargo, parece haber un problema al intentar compilar un módulo básico con Clang 13 en Macs basados en Intel y M1 que ejecutan macOS Monterey.
Incluso al usar los parámetros de línea de comandos correctos, la compilación falla con errores como “nombre de tipo desconocido ‘módulo'” y “se esperaba una plantilla”.
Una posible solución alternativa es usar la bandera “-fmodules-ts” experimental en lugar de “-fmodules”. Sin embargo, esta no es una solución ideal y puede que no funcione en todos los casos.
No está claro si existen limitaciones no documentadas en los Módulos C++20 con Apple Clang 13. Es posible que se necesite una investigación más detallada para determinar la causa raíz del problema y encontrar una solución viable.