-
Notifications
You must be signed in to change notification settings - Fork 333
Open
Description
As previously discussed @sharadhr, there seems to be a specific issue with Clang, where __cpp_lib_modules
does not automatically get defined. It would be great to figure out why, so we could remove the manual guards currently present for import std
. Given the minimal example:
CMakeLists.txt
cmake_minimum_required(VERSION 4.1)
set(CMAKE_CXX_STANDARD 23)
set(CMAKE_CXX_MODULE_STD ON)
set(CMAKE_EXPERIMENTAL_CXX_IMPORT_STD d0edc3af-4c50-42ea-a356-e2862fe7a444)
project(example LANGUAGES CXX)
add_executable(${PROJECT_NAME} "main.cpp")
main.cpp
#include <version>
#ifdef __cpp_lib_modules
# error "sugondese"
#endif
import std;
int main() {
std::println("goodbye world");
}
On my system (arch linux, packaged Clang 20.1.8
), the symbol is never defined, so this compiles just fine:
[main] Configuring project: vulkan-testing
[proc] Executing command: /usr/bin/cmake -DCMAKE_BUILD_TYPE:STRING=Debug -DCMAKE_EXPORT_COMPILE_COMMANDS:BOOL=TRUE -DCMAKE_C_COMPILER:FILEPATH=/usr/bin/clang -DCMAKE_CXX_COMPILER:FILEPATH=/usr/bin/clang++ --no-warn-unused-cli -S /home/jan/repos/vulkan-testing -B /home/jan/repos/vulkan-testing/build -G Ninja
[cmake] Not searching for unused variables given on the command line.
[cmake] -- The CXX compiler identification is Clang 20.1.8
[cmake] -- Detecting CXX compiler ABI info
[cmake] -- Detecting CXX compiler ABI info - done
[cmake] -- Check for working CXX compiler: /usr/bin/clang++ - skipped
[cmake] -- Detecting CXX compile features
[cmake] CMake Warning (dev) at /usr/share/cmake/Modules/Compiler/CMakeCommonCompilerMacros.cmake:248 (cmake_language):
[cmake] CMake's support for `import std;` in C++23 and newer is experimental. It
[cmake] is meant only for experimentation and feedback to CMake developers.
[cmake] Call Stack (most recent call first):
[cmake] /usr/share/cmake/Modules/CMakeDetermineCompilerSupport.cmake:113 (cmake_create_cxx_import_std)
[cmake] /usr/share/cmake/Modules/CMakeTestCXXCompiler.cmake:83 (CMAKE_DETERMINE_COMPILER_SUPPORT)
[cmake] CMakeLists.txt:5 (project)
[cmake] This warning is for project developers. Use -Wno-dev to suppress it.
[cmake]
[cmake] -- Detecting CXX compile features - done
[cmake] -- Configuring done (0.2s)
[cmake] -- Generating done (0.0s)
[cmake] -- Build files have been written to: /home/jan/repos/vulkan-testing/build
Workspace is /home/jan/repos/vulkan-testing
build task started....
/usr/bin/cmake --build /home/jan/repos/vulkan-testing/build --config Debug --target all --
[3/10 10% :: 0.013] Scanning /usr/include/c++/15.2.1/bits/std.compat.cc for CXX dependencies
[3/10 20% :: 0.014] Scanning /home/jan/repos/vulkan-testing/main.cpp for CXX dependencies
[3/10 30% :: 0.054] Scanning /usr/include/c++/15.2.1/bits/std.cc for CXX dependencies
[4/10 40% :: 0.059] Generating CXX dyndep file CMakeFiles/__cmake_cxx23.dir/CXX.dd
[6/10 50% :: 0.064] Generating CXX dyndep file CMakeFiles/example.dir/CXX.dd
[6/10 60% :: 1.393] Building CXX object CMakeFiles/__cmake_cxx23.dir/usr/include/c++/15.2.1/bits/std.cc.o
[8/10 70% :: 1.429] Building CXX object CMakeFiles/__cmake_cxx23.dir/usr/include/c++/15.2.1/bits/std.compat.cc.o
[9/10 80% :: 1.443] Linking CXX static library lib__cmake_cxx23.a
[9/10 90% :: 1.618] Building CXX object CMakeFiles/example.dir/main.cpp.o
[10/10 100% :: 1.661] Linking CXX executable example
build finished successfully.
The same version packaged for Windows (LLVM-MingW) seems to differ in that respect (changed error to warning):
> cmake -S . -B build "-DCMAKE_CXX_COMPILER=$( Resolve-Path ..\llvm-mingw-20250709-ucrt-x86_64\bin\x86_64-w64-mingw32-clang++.exe)" --fresh -G Ninja -Wno-dev && cmake --build build --clean-first -v && .\build\example.exe
-- The CXX compiler identification is Clang 20.1.8
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Check for working CXX compiler: D:/Libraries/Desktop/llvm-mingw-20250709-ucrt-x86_64/bin/x86_64-w64-mingw32-clang++.exe - skipped
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Configuring done (0.6s)
-- Generating done (0.0s)
-- Build files have been written to: D:/Libraries/Desktop/clang++21/build
Change Dir: 'D:/Libraries/Desktop/clang++21/build'
Run Clean Command: C:/PROGRA~1/MIB055~1/2022/ENTERP~1/Common7/IDE/COMMON~1/MICROS~1/CMake/Ninja/ninja.exe -v clean
[1/1] C:\PROGRA~1\MIB055~1\2022\ENTERP~1\Common7\IDE\COMMON~1\MICROS~1\CMake\Ninja\ninja.exe -t clean
Cleaning... 2 files.
Run Build Command(s): C:/PROGRA~1/MIB055~1/2022/ENTERP~1/Common7/IDE/COMMON~1/MICROS~1/CMake/Ninja/ninja.exe -v
[1/10] C:\WINDOWS\system32\cmd.exe /C ""D:/Libraries/Desktop/llvm-mingw-20250709-ucrt-x86_64/bin/x86_64-w64-mingw32-clang-scan-deps.exe" -format=p1689 -- D:\Libraries\Desktop\llvm-mingw-20250709-ucrt-x86_64\bin\x86_64-w64-mingw32-clang++.exe -std=gnu++23 -x c++ D:/Libraries/Desktop/clang++21/main.cpp -c -o CMakeFiles\example.dir\main.cpp.obj -resource-dir "D:/Libraries/Desktop/llvm-mingw-20250709-ucrt-x86_64/lib/clang/20" -MT CMakeFiles\example.dir\main.cpp.obj.ddi -MD -MF CMakeFiles\example.dir\main.cpp.obj.ddi.d > CMakeFiles\example.dir\main.cpp.obj.ddi.tmp && "C:/Program Files/CMake/bin/cmake.exe" -E rename CMakeFiles\example.dir\main.cpp.obj.ddi.tmp CMakeFiles\example.dir\main.cpp.obj.ddi"
[2/10] C:\WINDOWS\system32\cmd.exe /C ""D:/Libraries/Desktop/llvm-mingw-20250709-ucrt-x86_64/bin/x86_64-w64-mingw32-clang-scan-deps.exe" -format=p1689 -- D:\Libraries\Desktop\llvm-mingw-20250709-ucrt-x86_64\bin\x86_64-w64-mingw32-clang++.exe -ID:/Libraries/Desktop/llvm-mingw-20250709-ucrt-x86_64/x86_64-w64-mingw32/lib/../../share/libc++/v1 -std=gnu++23 -Wno-reserved-module-identifier -x c++ D:/Libraries/Desktop/llvm-mingw-20250709-ucrt-x86_64/share/libc++/v1/std.compat.cppm -c -o CMakeFiles\__cmake_cxx23.dir\D_\Libraries\Desktop\llvm-mingw-20250709-ucrt-x86_64\share\libc++\v1\std.compat.cppm.obj -resource-dir "D:/Libraries/Desktop/llvm-mingw-20250709-ucrt-x86_64/lib/clang/20" -MT CMakeFiles\__cmake_cxx23.dir\D_\Libraries\Desktop\llvm-mingw-20250709-ucrt-x86_64\share\libc++\v1\std.compat.cppm.obj.ddi -MD -MF CMakeFiles\__cmake_cxx23.dir\D_\Libraries\Desktop\llvm-mingw-20250709-ucrt-x86_64\share\libc++\v1\std.compat.cppm.obj.ddi.d > CMakeFiles\__cmake_cxx23.dir\D_\Libraries\Desktop\llvm-mingw-20250709-ucrt-x86_64\share\libc++\v1\std.compat.cppm.obj.ddi.tmp && "C:/Program Files/CMake/bin/cmake.exe" -E rename CMakeFiles\__cmake_cxx23.dir\D_\Libraries\Desktop\llvm-mingw-20250709-ucrt-x86_64\share\libc++\v1\std.compat.cppm.obj.ddi.tmp CMakeFiles\__cmake_cxx23.dir\D_\Libraries\Desktop\llvm-mingw-20250709-ucrt-x86_64\share\libc++\v1\std.compat.cppm.obj.ddi"
[3/10] C:\WINDOWS\system32\cmd.exe /C ""D:/Libraries/Desktop/llvm-mingw-20250709-ucrt-x86_64/bin/x86_64-w64-mingw32-clang-scan-deps.exe" -format=p1689 -- D:\Libraries\Desktop\llvm-mingw-20250709-ucrt-x86_64\bin\x86_64-w64-mingw32-clang++.exe -ID:/Libraries/Desktop/llvm-mingw-20250709-ucrt-x86_64/x86_64-w64-mingw32/lib/../../share/libc++/v1 -std=gnu++23 -Wno-reserved-module-identifier -x c++ D:/Libraries/Desktop/llvm-mingw-20250709-ucrt-x86_64/share/libc++/v1/std.cppm -c -o CMakeFiles\__cmake_cxx23.dir\D_\Libraries\Desktop\llvm-mingw-20250709-ucrt-x86_64\share\libc++\v1\std.cppm.obj -resource-dir "D:/Libraries/Desktop/llvm-mingw-20250709-ucrt-x86_64/lib/clang/20" -MT CMakeFiles\__cmake_cxx23.dir\D_\Libraries\Desktop\llvm-mingw-20250709-ucrt-x86_64\share\libc++\v1\std.cppm.obj.ddi -MD -MF CMakeFiles\__cmake_cxx23.dir\D_\Libraries\Desktop\llvm-mingw-20250709-ucrt-x86_64\share\libc++\v1\std.cppm.obj.ddi.d > CMakeFiles\__cmake_cxx23.dir\D_\Libraries\Desktop\llvm-mingw-20250709-ucrt-x86_64\share\libc++\v1\std.cppm.obj.ddi.tmp && "C:/Program Files/CMake/bin/cmake.exe" -E rename CMakeFiles\__cmake_cxx23.dir\D_\Libraries\Desktop\llvm-mingw-20250709-ucrt-x86_64\share\libc++\v1\std.cppm.obj.ddi.tmp CMakeFiles\__cmake_cxx23.dir\D_\Libraries\Desktop\llvm-mingw-20250709-ucrt-x86_64\share\libc++\v1\std.cppm.obj.ddi"
[4/10] "C:\Program Files\CMake\bin\cmake.exe" -E cmake_ninja_dyndep --tdi=CMakeFiles\__cmake_cxx23.dir\CXXDependInfo.json --lang=CXX --modmapfmt=clang --dd=CMakeFiles/__cmake_cxx23.dir/CXX.dd @CMakeFiles/__cmake_cxx23.dir/CXX.dd.rsp
[5/10] "C:\Program Files\CMake\bin\cmake.exe" -E cmake_ninja_dyndep --tdi=CMakeFiles\example.dir\CXXDependInfo.json --lang=CXX --modmapfmt=clang --dd=CMakeFiles/example.dir/CXX.dd @CMakeFiles/example.dir/CXX.dd.rsp
[6/10] D:\Libraries\Desktop\llvm-mingw-20250709-ucrt-x86_64\bin\x86_64-w64-mingw32-clang++.exe -ID:/Libraries/Desktop/llvm-mingw-20250709-ucrt-x86_64/x86_64-w64-mingw32/lib/../../share/libc++/v1 -std=gnu++23 -Wno-reserved-module-identifier -MD -MT CMakeFiles/__cmake_cxx23.dir/D_/Libraries/Desktop/llvm-mingw-20250709-ucrt-x86_64/share/libc++/v1/std.cppm.obj -MF CMakeFiles\__cmake_cxx23.dir\D_\Libraries\Desktop\llvm-mingw-20250709-ucrt-x86_64\share\libc++\v1\std.cppm.obj.d @CMakeFiles\__cmake_cxx23.dir\D_\Libraries\Desktop\llvm-mingw-20250709-ucrt-x86_64\share\libc++\v1\std.cppm.obj.modmap -o CMakeFiles/__cmake_cxx23.dir/D_/Libraries/Desktop/llvm-mingw-20250709-ucrt-x86_64/share/libc++/v1/std.cppm.obj -c D:/Libraries/Desktop/llvm-mingw-20250709-ucrt-x86_64/share/libc++/v1/std.cppm
[7/10] D:\Libraries\Desktop\llvm-mingw-20250709-ucrt-x86_64\bin\x86_64-w64-mingw32-clang++.exe -ID:/Libraries/Desktop/llvm-mingw-20250709-ucrt-x86_64/x86_64-w64-mingw32/lib/../../share/libc++/v1 -std=gnu++23 -Wno-reserved-module-identifier -MD -MT CMakeFiles/__cmake_cxx23.dir/D_/Libraries/Desktop/llvm-mingw-20250709-ucrt-x86_64/share/libc++/v1/std.compat.cppm.obj -MF CMakeFiles\__cmake_cxx23.dir\D_\Libraries\Desktop\llvm-mingw-20250709-ucrt-x86_64\share\libc++\v1\std.compat.cppm.obj.d @CMakeFiles\__cmake_cxx23.dir\D_\Libraries\Desktop\llvm-mingw-20250709-ucrt-x86_64\share\libc++\v1\std.compat.cppm.obj.modmap -o CMakeFiles/__cmake_cxx23.dir/D_/Libraries/Desktop/llvm-mingw-20250709-ucrt-x86_64/share/libc++/v1/std.compat.cppm.obj -c D:/Libraries/Desktop/llvm-mingw-20250709-ucrt-x86_64/share/libc++/v1/std.compat.cppm
[8/10] C:\WINDOWS\system32\cmd.exe /C "cd . && "C:\Program Files\CMake\bin\cmake.exe" -E rm -f lib__cmake_cxx23.a && D:\Libraries\Desktop\llvm-mingw-20250709-ucrt-x86_64\bin\x86_64-w64-mingw32-llvm-ar.exe qc lib__cmake_cxx23.a CMakeFiles/__cmake_cxx23.dir/D_/Libraries/Desktop/llvm-mingw-20250709-ucrt-x86_64/share/libc++/v1/std.cppm.obj CMakeFiles/__cmake_cxx23.dir/D_/Libraries/Desktop/llvm-mingw-20250709-ucrt-x86_64/share/libc++/v1/std.compat.cppm.obj && D:\Libraries\Desktop\llvm-mingw-20250709-ucrt-x86_64\bin\x86_64-w64-mingw32-llvm-ranlib.exe lib__cmake_cxx23.a && cd ."
[9/10] D:\Libraries\Desktop\llvm-mingw-20250709-ucrt-x86_64\bin\x86_64-w64-mingw32-clang++.exe -std=gnu++23 -MD -MT CMakeFiles/example.dir/main.cpp.obj -MF CMakeFiles\example.dir\main.cpp.obj.d @CMakeFiles\example.dir\main.cpp.obj.modmap -o CMakeFiles/example.dir/main.cpp.obj -c D:/Libraries/Desktop/clang++21/main.cpp
D:/Libraries/Desktop/clang++21/main.cpp:3:5: warning: "sugondese" [-W#warnings]
3 | # warning "sugondese"
| ^
1 warning generated.
[10/10] C:\WINDOWS\system32\cmd.exe /C "cd . && D:\Libraries\Desktop\llvm-mingw-20250709-ucrt-x86_64\bin\x86_64-w64-mingw32-clang++.exe CMakeFiles/example.dir/main.cpp.obj -o example.exe -Wl,--out-implib,libexample.dll.a -Wl,--major-image-version,0,--minor-image-version,0 lib__cmake_cxx23.a -lkernel32 -luser32 -lgdi32 -lwinspool -lshell32 -lole32 -loleaut32 -luuid -lcomdlg32 -ladvapi32 && cd ."
goodbye world
Metadata
Metadata
Assignees
Labels
No labels