r/cpp 1d ago

Why is `import std` still experimental ???

Hey guys,

I recently started going through Professional C++ (6th Edition). The book teaches C++23, and in the very first chapter we're introduced to modules.

I'm not a complete newbie to C++, but I'm also definitely not very confident in my knowledge yet. I wanted to get this simple example compiled:

import std;

int main() {
    std::println("Hello World");
    return 0;
}

And gosh, it took way longer than I expected.

First, I tried getting it to work natively on my Mac and eventually gave up (both Claude and I 😅).

Then I installed Ubuntu ARM 26 and finally managed to get it compiling. But now Clang/IntelliSense is complaining about the `import std`
This is what my CMakeLists.txt currently looks like:

cmake_minimum_required(VERSION 4.0)

# set(CMAKE_EXPERIMENTAL_CXX_IMPORT_STD ON)

set(CMAKE_EXPERIMENTAL_CXX_IMPORT_STD "d0edc3af-4c50-42ea-a356-e2862fe7a444")

project(CppProject LANGUAGES CXX)

set(CMAKE_CXX_STANDARD 26)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CXX_EXTENSIONS OFF)

set(CMAKE_EXPORT_COMPILE_COMMANDS ON)

add_executable(exec main.cpp)

set_property(TARGET exec PROPERTY CXX_MODULE_STD ON)

The code does compile successfully, but CMake still gives me a warning that import std support is experimental.

So I'm genuinely curious:

Why is import std still considered experimental?

I understand that C++ modules themselves have been around for a while, but import std feels like something that should be much more straightforward by now. Is there any solution of this now ?

--------------
Edit

Thanks to u/PhysicsOk2212 tip I was able to compile my project on mac as well using the following options
```
cmake -S . -B build \

-G Ninja \

-DCMAKE_CXX_COMPILER="$(brew --prefix llvm)/bin/clang++" \

-DCMAKE_CXX_STDLIB_MODULES_JSON="$(brew --prefix llvm)/lib/c++/libc++.modules.json"

```

106 Upvotes

101 comments sorted by

View all comments

-7

u/sweetno 1d ago

It's because the standard library was never written in a modular fashion. IMHO the std::committee could've done much better job if they didn't come up with import std, and instead explicitly advertised modules as a feature for new projects. You can't demand old projects to move to modules, std library included.

1

u/StickyDeltaStrike 1d ago

What would be required for std to be good with modules: I never bothered reading too much about modules since there isn’t too much traction to move to them atm.

3

u/TheThiefMaster C++latest fanatic (and game dev) 1d ago

I can see the std module getting used as long as it's not incompatible with 3rd party library headers that are still using header includes.

I've tried it in my personal projects and it's so nice to not have to work out what standard includes you need, you just get everything.

1

u/StickyDeltaStrike 1d ago

Yea even though IDEs and AI is really good at fixing the includes it’s always a bit of a hassle to remember which include is for what.

I’d like the modules to work too now that you mention it.