Boost logo

Boost :

From: Daniela Engert (dani_at_[hidden])
Date: 2024-04-09 09:25:42


> Boris Kolpackov via Boost <boost_at_[hidden]> hat am 09.04.2024 08:57 CEST geschrieben:
>
>
> Ruben Perez via Boost <boost_at_[hidden]> writes:
>
> > AFAIK libc++ makes it work by making the std modules a proxy to the
> > standard headers, with the "export using" idiom.
>
> At least up to Clang 18 it "works" to the same level as in MSVC 17.10:
> include-before-import works, the other way around -- doesn't. It's
> possible this has changed in Clang 19, though.
>
Right, and this precludes any non-trivial use of 'import std' when you can't control *all* dependencies in their entirety. You need to guarantee that *all* #includes of header files lexically appear before all imports that directly or indirectly depend on those same header files. In *all* translation units.

The standard *mandates* implementers to make the interoperability of #includes of standard C++ headers and the modularized standard library happen, regardless of ordering (with different levels of compliance in current implementations). But there is no such guarantee for other libraries.

I see a lot of people that underestimate what it takes to get this right.

Experience level 1: look Ma, my module compiles! I know modules!
Experience level 2: look Ma, I can import my module into a .cpp file! I know modules!
Experience level 3: look Ma, I can import my module into another module and it works!
Experience level 4: look Ma, I can import my module and other modules that import my module into the same .cpp files!
Experience level 5: that whole stuff actually links and does what it it supposed to do. On one compiler.
Experience level 6: you can repeat that, on multiple compilers.

The demo application from last year's talks was deliberately constructed such that I could demonstrate what it takes to get there. The hardest part was to deal with Asio, clang, and all the ABI deficiencies that were unveiled along the journey.

Dani


Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk