Skip to content

Latest commit

 

History

History
32 lines (27 loc) · 1.89 KB

README.md

File metadata and controls

32 lines (27 loc) · 1.89 KB

patches

Adaptations of the vendored Boost tree. tools/apply_patches.py applies every *.patch here to upstream/boost/ after tools/import_boost.py restored the pinned release, and is idempotent in both directions (an applied patch is skipped by the reverse check; patch -p1 is the fallback without Git).

The patches are minimal upstream adaptations: TU-local objects promoted to inline constexpr so a CMI and a consumer GMF cannot emit the same mangled symbol twice; internal-linkage/static helpers given external linkage for the export surface; platform guards for the vendored 1.92.0 tree; the system split that moves function-local statics out of headers.

Only the vendored tree is patched. The module layer is not: the export lists under generated/exports/ are written by tools/gen_exports.py alone — every guard, drop or verbatim line it needs is a rule with a written reason in tools/export_policy.toml — and src/*.cppm are hand-maintained facades that gen_exports.py --check verifies against the generated data. Nothing is replayed over generator output.

numeric.patch is the one functional adaptation with a release-mode edge: Boost.uBLAS tensor spells BOOST_UBLAS_INLINE before the template<...> head in a few member functions. BOOST_UBLAS_INLINE is empty in a checked build but inline under NDEBUG, and inline template<...> is ill-formed (gcc rejects it, clang misreads it as an explicit instantiation), so a release build of the numeric module needs the swap. The exported same_impl_ex follows the same header condition through the numeric guard in tools/export_policy.toml, so the release module neither exports a name the header hides nor fails on it.

Every patch is reviewed against the 1.92.0 tag it was written for; upstream/boost/SOURCE.md records the archive and checksum the tree comes from. A patch that neither applies nor is already applied fails the replay.