mirror of
https://github.com/boostorg/pfr.git
synced 2026-01-19 04:22:13 +00:00
Rewrite modules following the new recommended Boost practice (#196)
Changes: 1) `#include <boost/pfr...` is now implicitly does `import boost.pfr` if the modules are supported 2) CI now tests modules on Ubuntu 24.04 with existing runtime tests 3) Renamed module to `boost.pfr` 4) CMakeLists.txt now uses modules for `Boost::pfr` target if modules are supported 5) All the library internals now have unconditional module level linkage. `1)` allows users to mix `#include <boost/pfr...` and `import boost.pfr` in user code without ODR-violations. Significant differences from https://anarthal.github.io/cppblog/modules3: * PFR uses a `BOOST_PFR_USE_STD_MODULE` macro for `import std;` / `includes` while building module. This allows to use `boost.pfr` module in C++20 and even without usable `std` module.
This commit is contained in:
20
doc/pfr.qbk
20
doc/pfr.qbk
@@ -554,22 +554,22 @@ parameters provided to `BOOST_PFR_CORE_NAME_PARSING` macro [*and] the initial ou
|
||||
|
||||
[section PFR as a C++20 module]
|
||||
|
||||
[caution C++20 PFR module support is on early stage, targets and flags may change in the future]
|
||||
[caution C++20 PFR module support is on early stage, targets, flags and behavior may change in the future]
|
||||
|
||||
If using CMake of version 3.28.0 or higher define CMake option `-DBUILD_MODULE=1`
|
||||
to make the `Boost::pfr_module` and `Boost::pfr_module_migration` libraries
|
||||
available. With `Boost::pfr_module` C++20 module Boost.PFR could be used:
|
||||
If using modern CMake define CMake option `-DBOOST_USE_MODULES=1` to build a C++20 module and
|
||||
make the `Boost::pfr` CMake target provide it. After that an explicit usage of C++20 module `boost.pfr` is allowed:
|
||||
|
||||
[import ../module/usage_sample.cpp]
|
||||
[pfr_module_example]
|
||||
|
||||
The `Boost::pfr_module_migration` CMake target gives an ability to
|
||||
mix includes and imports of the PFR library in different translation units.
|
||||
The `Boost::pfr` CMake target gives an ability to mix includes and imports of the PFR library in different translation units. Moreover,
|
||||
if `BOOST_USE_MODULES` macro is defined then all the `boost/pfr/...` includes implicilty do `import boost.pfr;` to give all the
|
||||
benifits of modules without changing the existing code.
|
||||
|
||||
If not using CMake, then the module could be build manually from the
|
||||
`module/pfr.cppm` file. If mixing of includes in imports is desired, additionally
|
||||
define `BOOST_PFR_ATTACH_TO_GLOBAL_MODULE` preprocessor macro to attach all the
|
||||
module entities to a global module and avoid ODR issues.
|
||||
[note For better compile times make sure that `import std;` is available when building the `boost.pfr` module (in CMake logs there should be
|
||||
a 'Using `import std;`' message). ]
|
||||
|
||||
If not using CMake, then the module could be build manually from the `module/pfr.cppm` file.
|
||||
|
||||
For manual module build the following commands could be used for clang compiler:
|
||||
|
||||
|
||||
Reference in New Issue
Block a user