Boost logo

Boost :

From: Peter Dimov (pdimov_at_[hidden])
Date: 2025-01-12 21:10:06


Ruben Perez wrote:
> Hi all,
>
> I finally have something workable regarding Boost and C++20 modules.
> I've described it in detail in this article [1], but here's a rough
> summary:
>
> I've modularized Boost.Mp11 [2] (as an example of a header-only
> library) and Boost.Charconv [3] (as an example of a compiled library).
...
> Other than that, I'd like to get some feedback on this, and whether you think
> this proposal is worth the effort.

I looked at the Mp11 patch, and I think I don't quite like this approach.

At present, user code needs to look like this

#ifdef BOOST_USE_MODULES
import boost.mp11;
import boost.core;
import std;
#else
#include <boost/mp11/this.hpp>
#include <boost/core/that.hpp>
#include <standard_header>
#endif

and I'm not sure that this is what we want.

Rather, my current thinking is that we want this for user code:

#include <boost/mp11/this.hpp>
#include <boost/core/that.hpp>
#include <standard_header>

with boost/mp11/this.hpp being

#ifdef BOOST_USE_MODULES
import boost.mp11;
#else
#include <boost/mp11/detail/this.hpp>
#endif

This would presume that <standard_header> does something similar,
which is in fact one suggested implementation strategy.

If not, we'll need

#include <boost/mp11/this.hpp>
#include <boost/core/that.hpp>
#include <boost/std/standard_header.hpp>

which is not ideal, but is still better than what we started with.

In the general case (when a header also defines macros), the public
header will contain both

import boost.mp11;

and the part that defines the macros, which in Mp11's case is

#include <boost/mp11/version.hpp>

User code wouldn't need to know that in addition to the import,
it also needs to include a separate macro header.


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