diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index 9b4c84df8..9d7f5990a 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -12,519 +12,116 @@ on:
       - pr/**
 
 jobs:
-  posix:
+  cpp-matrix:
+    runs-on: ubuntu-latest
+    name: Generate Test Matrix
+    outputs:
+      matrix: ${{ steps.cpp-matrix.outputs.matrix }}
+    steps:
+      - name: Generate Test Matrix
+        uses: alandefreitas/cpp-actions/cpp-matrix@master
+        id: cpp-matrix
+        with:
+          extra-values: |
+            boost-lib: functional
+            scan-dirs: test
+          compilers: |
+            gcc >= 4.8
+            clang >= 3.5
+            msvc >= 14.1
+            apple-clang *
+            mingw *
+            clang-cl *
+          standards: ">=11"
+          latest-factors: |
+            gcc Asan TSan UBSan
+            clang BoundsSan IntSan
+          factors: |
+            gcc Shared
+            msvc Shared x86
+            mingw Shared
+          subrange-policy: |
+            msvc: one-per-minor
+          trace-commands: true
+  build:
+    needs: cpp-matrix
     strategy:
       fail-fast: false
       matrix:
-        include:
-          - name: "TOOLSET=gcc COMPILER=g++ CXXSTD=03,11 Job 0"
-            buildtype: "boost"
-            packages: ""
-            packages_to_remove: ""
-            os: "ubuntu-20.04"
-            container: "ubuntu:16.04"
-            cxx: "g++"
-            sources: ""
-            llvm_os: ""
-            llvm_ver: ""
-            toolset: "gcc"
-            compiler: "g++"
-            cxxstd: "03,11"
-          - name: "TOOLSET=gcc COMPILER=g++-4.4 CXXSTD=98,0x Job 1"
-            buildtype: "boost"
-            packages: "g++-4.4"
-            packages_to_remove: ""
-            os: "ubuntu-20.04"
-            container: "ubuntu:14.04"
-            cxx: "g++"
-            sources: ""
-            llvm_os: ""
-            llvm_ver: ""
-            toolset: "gcc"
-            compiler: "g++-4.4"
-            cxxstd: "98,0x"
-          - name: "TOOLSET=gcc COMPILER=g++-4.6 CXXSTD=03,0x Job 2"
-            buildtype: "boost"
-            packages: "g++-4.6"
-            packages_to_remove: ""
-            os: "ubuntu-20.04"
-            container: "ubuntu:16.04"
-            cxx: "g++"
-            sources: ""
-            llvm_os: ""
-            llvm_ver: ""
-            toolset: "gcc"
-            compiler: "g++-4.6"
-            cxxstd: "03,0x"
-          - name: "TOOLSET=gcc COMPILER=g++-4.7 CXXSTD=03,11 Job 3"
-            buildtype: "boost"
-            packages: "g++-4.7"
-            packages_to_remove: ""
-            os: "ubuntu-20.04"
-            container: "ubuntu:14.04"
-            cxx: "g++-4.7"
-            sources: ""
-            llvm_os: ""
-            llvm_ver: ""
-            toolset: "gcc"
-            compiler: "g++-4.7"
-            cxxstd: "03,11"
-          - name: "TOOLSET=gcc COMPILER=g++-4.8 CXXSTD=03,11 Job 4"
-            buildtype: "boost"
-            packages: "g++-4.8"
-            packages_to_remove: ""
-            os: "ubuntu-20.04"
-            container: "ubuntu:14.04"
-            cxx: "g++-4.8"
-            sources: ""
-            llvm_os: ""
-            llvm_ver: ""
-            toolset: "gcc"
-            compiler: "g++-4.8"
-            cxxstd: "03,11"
-          - name: "TOOLSET=gcc COMPILER=g++-4.9 CXXSTD=03,11 Job 5"
-            buildtype: "boost"
-            packages: "g++-4.9"
-            packages_to_remove: ""
-            os: "ubuntu-20.04"
-            container: "ubuntu:16.04"
-            cxx: "g++-4.9"
-            sources: ""
-            llvm_os: ""
-            llvm_ver: ""
-            toolset: "gcc"
-            compiler: "g++-4.9"
-            cxxstd: "03,11"
-          - name: "TOOLSET=gcc COMPILER=g++-5 CXXSTD=03,11,14,1z Job 6"
-            buildtype: "boost"
-            packages: "g++-5"
-            packages_to_remove: ""
-            os: "ubuntu-20.04"
-            container: "ubuntu:16.04"
-            cxx: "g++-5"
-            sources: ""
-            llvm_os: ""
-            llvm_ver: ""
-            toolset: "gcc"
-            compiler: "g++-5"
-            cxxstd: "03,11,14,1z"
-          - name: "TOOLSET=gcc COMPILER=g++-6 CXXSTD=03,11,14,1z Job 7"
-            buildtype: "boost"
-            packages: "g++-6"
-            packages_to_remove: ""
-            os: "ubuntu-20.04"
-            container: "ubuntu:14.04"
-            cxx: "g++-6"
-            sources: ""
-            llvm_os: ""
-            llvm_ver: ""
-            toolset: "gcc"
-            compiler: "g++-6"
-            cxxstd: "03,11,14,1z"
-          - name: "TOOLSET=gcc COMPILER=g++-7 CXXSTD=03,11,14,17 Job 8"
-            buildtype: "boost"
-            packages: "g++-7"
-            packages_to_remove: ""
-            os: "ubuntu-20.04"
-            container: "ubuntu:16.04"
-            cxx: "g++-7"
-            sources: ""
-            llvm_os: ""
-            llvm_ver: ""
-            toolset: "gcc"
-            compiler: "g++-7"
-            cxxstd: "03,11,14,17"
-          - name: "TOOLSET=gcc COMPILER=g++-8 CXXSTD=03,11,14,17 Job 9"
-            buildtype: "boost"
-            packages: "g++-8"
-            packages_to_remove: ""
-            os: "ubuntu-20.04"
-            container: "ubuntu:16.04"
-            cxx: "g++-8"
-            sources: ""
-            llvm_os: ""
-            llvm_ver: ""
-            toolset: "gcc"
-            compiler: "g++-8"
-            cxxstd: "03,11,14,17,2a"
-          - name: "TOOLSET=gcc COMPILER=g++-9 CXXSTD=03,11,14,17 Job 10"
-            buildtype: "boost"
-            packages: "g++-9"
-            packages_to_remove: ""
-            os: "ubuntu-20.04"
-            container: "ubuntu:16.04"
-            cxx: "g++-9"
-            sources: ""
-            llvm_os: ""
-            llvm_ver: ""
-            toolset: "gcc"
-            compiler: "g++-9"
-            cxxstd: "03,11,14,17,2a"
-          - name: "TOOLSET=clang COMPILER=clang++ CXXSTD=03,11 Job 11"
-            buildtype: "boost"
-            packages: ""
-            packages_to_remove: ""
-            os: "ubuntu-18.04"
-            cxx: "clang++"
-            sources: ""
-            llvm_os: ""
-            llvm_ver: ""
-            toolset: "clang"
-            compiler: "clang++"
-            cxxstd: "03,11"
-          - name: "TOOLSET=clang COMPILER=/usr/bin/clang++ CXXST Job 12"
-            buildtype: "boost"
-            packages: "clang-3.3"
-            packages_to_remove: ""
-            os: "ubuntu-20.04"
-            container: "ubuntu:14.04"
-            cxx: "/usr/bin/clang++"
-            sources: ""
-            llvm_os: ""
-            llvm_ver: ""
-            toolset: "clang"
-            compiler: "/usr/bin/clang++"
-            cxxstd: "03,11"
-          - name: "TOOLSET=clang COMPILER=/usr/bin/clang++ CXXST Job 13"
-            buildtype: "boost"
-            packages: "clang-3.4"
-            packages_to_remove: ""
-            os: "ubuntu-20.04"
-            container: "ubuntu:14.04"
-            cxx: "/usr/bin/clang++"
-            sources: ""
-            llvm_os: ""
-            llvm_ver: ""
-            toolset: "clang"
-            compiler: "/usr/bin/clang++"
-            cxxstd: "03,11"
-          - name: "TOOLSET=clang COMPILER=clang++-3.5 CXXSTD=03, Job 14"
-            buildtype: "boost"
-            packages: "clang-3.5 libstdc++-4.9-dev"
-            packages_to_remove: ""
-            os: "ubuntu-20.04"
-            container: "ubuntu:14.04"
-            cxx: "clang++-3.5"
-            sources: ""
-            llvm_os: "precise"
-            llvm_ver: "3.5"
-            toolset: "clang"
-            compiler: "clang++-3.5"
-            cxxstd: "03,11,14"
-          - name: "TOOLSET=clang COMPILER=clang++-3.6 CXXSTD=03, Job 15"
-            buildtype: "boost"
-            packages: "clang-3.6"
-            packages_to_remove: ""
-            os: "ubuntu-20.04"
-            container: "ubuntu:14.04"
-            cxx: "clang++-3.6"
-            sources: ""
-            llvm_os: "precise"
-            llvm_ver: "3.6"
-            toolset: "clang"
-            compiler: "clang++-3.6"
-            cxxstd: "03,11,14"
-          - name: "TOOLSET=clang COMPILER=clang++-3.7 CXXSTD=03, Job 16"
-            buildtype: "boost"
-            packages: "clang-3.7"
-            packages_to_remove: ""
-            os: "ubuntu-20.04"
-            container: "ubuntu:14.04"
-            cxx: "clang++-3.7"
-            sources: ""
-            llvm_os: "precise"
-            llvm_ver: "3.7"
-            toolset: "clang"
-            compiler: "clang++-3.7"
-            cxxstd: "03,11,14"
-          - name: "TOOLSET=clang COMPILER=clang++-3.8 CXXSTD=03, Job 17"
-            buildtype: "boost"
-            packages: "clang-3.8 libstdc++-4.9-dev"
-            packages_to_remove: ""
-            os: "ubuntu-20.04"
-            container: "ubuntu:14.04"
-            cxx: "clang++-3.8"
-            sources: ""
-            llvm_os: "precise"
-            llvm_ver: "3.8"
-            toolset: "clang"
-            compiler: "clang++-3.8"
-            cxxstd: "03,11,14"
-          - name: "TOOLSET=clang COMPILER=clang++-3.9 CXXSTD=03, Job 18"
-            buildtype: "boost"
-            packages: "clang-3.9 libstdc++-4.9-dev"
-            packages_to_remove: ""
-            os: "ubuntu-20.04"
-            container: "ubuntu:14.04"
-            cxx: "clang++-3.9"
-            sources: ""
-            llvm_os: "precise"
-            llvm_ver: "3.9"
-            toolset: "clang"
-            compiler: "clang++-3.9"
-            cxxstd: "03,11,14"
-          - name: "TOOLSET=clang COMPILER=clang++-4.0 CXXSTD=03, Job 19"
-            buildtype: "boost"
-            packages: "clang-4.0"
-            packages_to_remove: ""
-            os: "ubuntu-20.04"
-            container: "ubuntu:14.04"
-            cxx: "clang++-4.0"
-            sources: ""
-            llvm_os: "trusty"
-            llvm_ver: "4.0"
-            toolset: "clang"
-            compiler: "clang++-4.0"
-            cxxstd: "03,11,14"
-          - name: "TOOLSET=clang COMPILER=clang++-5.0 CXXSTD=03, Job 20"
-            buildtype: "boost"
-            packages: "clang-5.0"
-            packages_to_remove: ""
-            os: "ubuntu-20.04"
-            container: "ubuntu:14.04"
-            cxx: "clang++-5.0"
-            sources: ""
-            llvm_os: "trusty"
-            llvm_ver: "5.0"
-            toolset: "clang"
-            compiler: "clang++-5.0"
-            cxxstd: "03,11,14,1z"
-          - name: "TOOLSET=clang COMPILER=clang++-6.0 CXXSTD=03, Job 21"
-            buildtype: "boost"
-            packages: "clang-6.0"
-            packages_to_remove: ""
-            os: "ubuntu-20.04"
-            container: "ubuntu:14.04"
-            cxx: "clang++-6.0"
-            sources: ""
-            llvm_os: "trusty"
-            llvm_ver: "6.0"
-            toolset: "clang"
-            compiler: "clang++-6.0"
-            cxxstd: "03,11,14,17,2a"
-          - name: "TOOLSET=clang COMPILER=clang++-7 CXXSTD=03,11 Job 22"
-            buildtype: "boost"
-            packages: "clang-7"
-            packages_to_remove: ""
-            os: "ubuntu-20.04"
-            container: "ubuntu:16.04"
-            cxx: "clang++-7"
-            sources: ""
-            llvm_os: "xenial"
-            llvm_ver: "7"
-            toolset: "clang"
-            compiler: "clang++-7"
-            cxxstd: "03,11,14,17,2a"
-          - name: "TOOLSET=clang COMPILER=clang++-8 CXXSTD=03,11 Job 23"
-            buildtype: "boost"
-            packages: "clang-8"
-            packages_to_remove: ""
-            os: "ubuntu-20.04"
-            container: "ubuntu:16.04"
-            cxx: "clang++-8"
-            sources: ""
-            llvm_os: "xenial"
-            llvm_ver: "8"
-            toolset: "clang"
-            compiler: "clang++-8"
-            cxxstd: "03,11,14,17,2a"
-          - name: "TOOLSET=clang COMPILER=clang++-libc++ CXXSTD= Job 24"
-            buildtype: "boost"
-            packages: " libc++-9-dev libc++abi-9-dev"
-            packages_to_remove: "libc++-dev libc++abi-dev"
-            os: "ubuntu-18.04"
-            cxx: "clang++-libc++"
-            sources: ""
-            llvm_os: "xenial"
-            llvm_ver: "9"
-            toolset: "clang"
-            compiler: "clang++-libc++"
-            cxxstd: "03,11,14,1z"
+        include: ${{ fromJSON(needs.cpp-matrix.outputs.matrix) }}
 
-    runs-on: ${{ matrix.os }}
+    # use matrix entries
+    name: ${{ matrix.name }}
+    runs-on: ${{ matrix.runs-on }}
     container: ${{ matrix.container }}
 
     steps:
-      - name: Check if running in container
-        if: matrix.container != ''
-        run: echo "GHA_CONTAINER=${{ matrix.container }}" >> $GITHUB_ENV
-      - name: If running in container, upgrade packages
-        if: matrix.container != ''
+      # GitHub Actions no longer support older containers.
+      # The workaround is to install our own Node.js for the actions.
+      - name: Patch Node
+        # The containers that need Node.js 20 will have volumes set up so that
+        # the Node.js 20 installation can go there.
+        if: ${{ matrix.container.volumes }}
         run: |
-            apt-get -o Acquire::Retries=3 update && DEBIAN_FRONTEND=noninteractive apt-get -y install tzdata && apt-get -o Acquire::Retries=3 install -y sudo software-properties-common wget curl apt-transport-https make apt-file sudo unzip libssl-dev build-essential autotools-dev autoconf automake g++ libc++-helpers python ruby cpio gcc-multilib g++-multilib pkgconf python3 ccache libpython-dev
-            sudo apt-add-repository ppa:git-core/ppa
-            sudo apt-get -o Acquire::Retries=3 update && apt-get -o Acquire::Retries=3 -y install git
-            python_version=$(python3 -c 'import sys; print("{0.major}.{0.minor}".format(sys.version_info))')
-            sudo wget https://bootstrap.pypa.io/pip/$python_version/get-pip.py
-            sudo python3 get-pip.py
-            sudo /usr/local/bin/pip install cmake
-
-      - uses: actions/checkout@v2
-
-      - name: linux
-        shell: bash
-        env:
-          CXX: ${{ matrix.cxx }}
-          SOURCES: ${{ matrix.sources }}
-          LLVM_OS: ${{ matrix.llvm_os }}
-          LLVM_VER: ${{ matrix.llvm_ver }}
-          PACKAGES: ${{ matrix.packages }}
-          PACKAGES_TO_REMOVE: ${{ matrix.packages_to_remove }}
-          JOB_BUILDTYPE: ${{ matrix.buildtype }}
-          TOOLSET: ${{ matrix.toolset }}
-          COMPILER: ${{ matrix.compiler }}
-          CXXSTD: ${{ matrix.cxxstd }}
-          TRAVIS_BRANCH: ${{ github.base_ref }}
-          TRAVIS_OS_NAME: "linux"
-        run: |
-          echo '==================================> SETUP'
-          echo '==================================> PACKAGES'
-          set -e
-          if [ -n "$PACKAGES_TO_REMOVE" ]; then sudo apt-get purge -y $PACKAGES_TO_REMOVE; fi
-          echo ">>>>> APT: REPO.."
-          for i in {1..3}; do sudo -E apt-add-repository -y "ppa:ubuntu-toolchain-r/test" && break || sleep 2; done
-          
-          if test -n "${LLVM_OS}" ; then
-              wget -O - https://apt.llvm.org/llvm-snapshot.gpg.key | sudo apt-key add -
-              if test -n "${LLVM_VER}" ; then
-                  sudo -E apt-add-repository "deb http://apt.llvm.org/${LLVM_OS}/ llvm-toolchain-${LLVM_OS}-${LLVM_VER} main"
-              else
-                  # Snapshot (i.e. trunk) build of clang
-                  sudo -E apt-add-repository "deb http://apt.llvm.org/${LLVM_OS}/ llvm-toolchain-${LLVM_OS} main"
-              fi
-          fi
-          echo ">>>>> APT: UPDATE.."
-          sudo -E apt-get -o Acquire::Retries=3 update
-          if test -n "${SOURCES}" ; then
-              echo ">>>>> APT: INSTALL SOURCES.."
-              for SOURCE in $SOURCES; do
-                  sudo -E apt-add-repository ppa:$SOURCE
-              done
-          fi
-          echo ">>>>> APT: INSTALL ${PACKAGES}.."
-          sudo -E DEBIAN_FRONTEND=noninteractive apt-get -o Acquire::Retries=3 -y --no-install-suggests --no-install-recommends install ${PACKAGES}
-
-          echo '==================================> INSTALL AND COMPILE'
-          set -e
-          export TRAVIS_BUILD_DIR=$(pwd)
-          export TRAVIS_BRANCH=${TRAVIS_BRANCH:-$(echo $GITHUB_REF | awk 'BEGIN { FS = "/" } ; { print $3 }')}
-          export VCS_COMMIT_ID=$GITHUB_SHA
-          export GIT_COMMIT=$GITHUB_SHA
-          export REPO_NAME=$(basename $GITHUB_REPOSITORY)
-          export USER=$(whoami)
-          export CC=${CC:-gcc}
-          export PATH=~/.local/bin:/usr/local/bin:$PATH
-
-          if [ "$JOB_BUILDTYPE" == "boost" ]; then
-
-          echo '==================================> INSTALL'
-
-          BOOST_BRANCH=develop && [ "$TRAVIS_BRANCH" == "master" ] && BOOST_BRANCH=master || true
-          cd ..
-          git clone -b $BOOST_BRANCH https://github.com/boostorg/boost.git boost
-          cd boost
-          git submodule update --init tools/build
-          git submodule update --init libs/config
-          git submodule update --init tools/boostdep
-          mkdir -p libs/functional
-          cp -r $TRAVIS_BUILD_DIR/* libs/functional
-          python tools/boostdep/depinst/depinst.py -I forward/test -I factory/test -I overloaded_function/test functional
-          ./bootstrap.sh
-          ./b2 headers
-
-          echo '==================================> SCRIPT'
-
-          echo "using $TOOLSET : : $COMPILER ;" > ~/user-config.jam
-          cd libs/functional
-          ../../b2 -j 3 test toolset=$TOOLSET cxxstd=$CXXSTD
-          ../../b2 -j 3 forward/test toolset=$TOOLSET cxxstd=$CXXSTD
-          ../../b2 -j 3 factory/test toolset=$TOOLSET cxxstd=$CXXSTD
-          ../../b2 -j 3 overloaded_function/test toolset=$TOOLSET cxxstd=$CXXSTD
-
-          fi
-  osx:
-    strategy:
-      fail-fast: false
-      matrix:
-        include:
-          - name: "TOOLSET=clang COMPILER=clang++ CXXSTD=03,11,1 Job 25"
-            buildtype: "boost"
-            packages: ""
-            os: "macos-10.15"
-            cxx: "clang++"
-            sources: ""
-            llvm_os: ""
-            llvm_ver: ""
-            xcode_version: 11.7
-            toolset: "clang"
-            compiler: "clang++"
-            cxxstd: "03,11,14,1z"
-
-    runs-on: ${{ matrix.os }}
-
-    steps:
-      - uses: actions/checkout@v2
-
-      - name: Set DEVELOPER_DIR
-        if: matrix.xcode_version != ''
-        run: echo "DEVELOPER_DIR=/Applications/Xcode_${{ matrix.xcode_version }}.app/Contents/Developer" >> $GITHUB_ENV
-      - name: Test DEVELOPER_DIR
-        run: echo $DEVELOPER_DIR
-
-      - name: "osx"
+          set -x
+          apt-get update
+          apt-get install -y curl xz-utils
+          curl -LO https://archives.boost.io/misc/node/node-v20.9.0-linux-x64-glibc-217.tar.xz
+          tar -xf node-v20.9.0-linux-x64-glibc-217.tar.xz --strip-components 1 -C /node20217
+          ldd /__e/node20/bin/node
+
+      - name: Setup C++ Compiler
+        uses: alandefreitas/cpp-actions/setup-cpp@master
+        id: setup-cpp
+        with:
+          compiler: ${{ matrix.compiler }}
+          version: ${{ matrix.version }}
+
+      - name: Install Packages
+        if: matrix.install != ''
+        uses: alandefreitas/cpp-actions/package-install@master
+        id: package-install
+        with:
+          apt-get: ${{ matrix.install }}
+
+      - name: Clone Library
+        uses: actions/checkout@v4
+
+      - name: Clone Boost
+        uses: alandefreitas/cpp-actions/boost-clone@master
+        id: boost-clone
+        with:
+          branch: ${{ (github.ref_name == 'master' && github.ref_name) || 'develop' }}
+          boost-dir: ../boost-root
+          scan-modules-dir: .
+          scan-modules-ignore: ${{ matrix.boost-lib }}
+          modules-scan-paths: ${{ matrix.scan-dirs }}
+          cache: false
+
+      - name: Copy Library
         shell: bash
-        env:
-          CXX: ${{ matrix.cxx }}
-          SOURCES: ${{ matrix.sources }}
-          LLVM_OS: ${{ matrix.llvm_os }}
-          LLVM_VER: ${{ matrix.llvm_ver }}
-          PACKAGES: ${{ matrix.packages }}
-          JOB_BUILDTYPE: ${{ matrix.buildtype }}
-          TOOLSET: ${{ matrix.toolset }}
-          COMPILER: ${{ matrix.compiler }}
-          CXXSTD: ${{ matrix.cxxstd }}
-          TRAVIS_BRANCH: ${{ github.base_ref }}
-          TRAVIS_OS_NAME: "osx"
         run: |
-          echo '==================================> SETUP'
-          set -e
-          sudo mv /Library/Developer/CommandLineTools /Library/Developer/CommandLineTools.bck
-          echo '==================================> PACKAGES'
-          echo '==================================> INSTALL AND COMPILE'
-          set -e
-          export TRAVIS_BUILD_DIR=$(pwd)
-          export TRAVIS_BRANCH=${TRAVIS_BRANCH:-$(echo $GITHUB_REF | awk 'BEGIN { FS = "/" } ; { print $3 }')}
-          export VCS_COMMIT_ID=$GITHUB_SHA
-          export GIT_COMMIT=$GITHUB_SHA
-          export REPO_NAME=$(basename $GITHUB_REPOSITORY)
-          export USER=$(whoami)
-          export CC=${CC:-gcc}
-          export PATH=~/.local/bin:/usr/local/bin:$PATH
-
-          if [ "$JOB_BUILDTYPE" == "boost" ]; then
-
-          echo '==================================> INSTALL'
-
-          BOOST_BRANCH=develop && [ "$TRAVIS_BRANCH" == "master" ] && BOOST_BRANCH=master || true
-          cd ..
-          git clone -b $BOOST_BRANCH https://github.com/boostorg/boost.git boost
-          cd boost
-          git submodule update --init tools/build
-          git submodule update --init libs/config
-          git submodule update --init tools/boostdep
-          mkdir -p libs/functional
-          cp -r $TRAVIS_BUILD_DIR/* libs/functional
-          python tools/boostdep/depinst/depinst.py -I forward/test -I factory/test -I overloaded_function/test functional
-          ./bootstrap.sh
-          ./b2 headers
-
-          echo '==================================> SCRIPT'
-
-          echo "using $TOOLSET : : $COMPILER ;" > ~/user-config.jam
-          cd libs/functional
-          ../../b2 -j 3 test toolset=$TOOLSET cxxstd=$CXXSTD
-          ../../b2 -j 3 forward/test toolset=$TOOLSET cxxstd=$CXXSTD
-          ../../b2 -j 3 factory/test toolset=$TOOLSET cxxstd=$CXXSTD
-          ../../b2 -j 3 overloaded_function/test toolset=$TOOLSET cxxstd=$CXXSTD
-
-          fi
+          workspace_root=$(echo "$GITHUB_WORKSPACE" | sed 's/\\/\//g')
+          cd ../boost-root
+          rm -rf "libs/${{ matrix.boost-lib }}"
+          mkdir "libs/${{ matrix.boost-lib }}"
+          cp -r "$workspace_root"/* "libs/${{ matrix.boost-lib }}"
+
+      - name: B2 Workflow
+        uses: alandefreitas/cpp-actions/b2-workflow@master
+        with:
+          source-dir: ${{ steps.boost-clone.outputs.boost-dir }}
+          modules: ${{ matrix.boost-lib }}
+          toolset: ${{ matrix.b2-toolset }}
+          build-variant: ${{ matrix.build-type }}
+          cxx: ${{ steps.setup-cpp.outputs.cxx || '' }}
+          cxxstd: ${{ matrix.cxxstd }}
+          address-model: ${{ matrix.address-model }}
+          asan: ${{ matrix.asan }}
+          ubsan: ${{ matrix.ubsan }}
+          tsan: ${{ matrix.tsan }}
+          shared: ${{ matrix.shared }}
+          abbreviate-paths: false
+          hash: true
+          debug-configuration: true
+          trace-commands: true
diff --git a/build.jam b/build.jam
new file mode 100644
index 000000000..15faa37f2
--- /dev/null
+++ b/build.jam
@@ -0,0 +1,29 @@
+# Copyright René Ferdinand Rivera Morell 2023-2024
+# Distributed under the Boost Software License, Version 1.0.
+# (See accompanying file LICENSE_1_0.txt or copy at
+# http://www.boost.org/LICENSE_1_0.txt)
+
+require-b2 5.2 ;
+
+constant boost_dependencies :
+    /boost/config//boost_config
+    /boost/core//boost_core
+    /boost/function//boost_function
+    /boost/function_types//boost_function_types
+    /boost/mpl//boost_mpl
+    /boost/preprocessor//boost_preprocessor
+    /boost/type_traits//boost_type_traits
+    /boost/typeof//boost_typeof
+    /boost/utility//boost_utility ;
+
+project /boost/functional
+    ;
+
+explicit
+    [ alias boost_functional : : :
+        : <include>include <library>$(boost_dependencies) ]
+    [ alias all : boost_functional test factory/test forward/test overloaded_function/test ]
+    ;
+
+call-if : boost-library functional
+    ;
diff --git a/factory/test/Jamfile b/factory/test/Jamfile
index 7030e9392..e424883b6 100644
--- a/factory/test/Jamfile
+++ b/factory/test/Jamfile
@@ -8,6 +8,11 @@
 
 import testing ;
 
+project : requirements
+    <library>/boost/functional//boost_functional
+    <library>/boost/smart_ptr//boost_smart_ptr
+    ;
+
 run value_factory.cpp ;
 run value_factory_args.cpp ;
 run value_factory_move.cpp ;
diff --git a/forward/test/Jamfile b/forward/test/Jamfile
index 9169456d9..5a156418a 100644
--- a/forward/test/Jamfile
+++ b/forward/test/Jamfile
@@ -6,7 +6,8 @@
 
 import testing ;
 
-project forward-tests
+project forward-tests : requirements
+    <library>/boost/functional//boost_functional
     ;
 
 test-suite functional/forward
diff --git a/overloaded_function/doc/Jamfile.v2 b/overloaded_function/doc/Jamfile.v2
index 3bcf69b4f..ffecd0e57 100644
--- a/overloaded_function/doc/Jamfile.v2
+++ b/overloaded_function/doc/Jamfile.v2
@@ -9,8 +9,8 @@ import quickbook ;
 using boostbook ;
 
 doxygen reference
-    :   ../../../../boost/functional/overloaded_function.hpp
-        ../../../../boost/functional/overloaded_function/config.hpp
+    :   ../../include/boost/functional/overloaded_function.hpp
+        ../../include/boost/functional/overloaded_function/config.hpp
     :   <reftitle>"Reference"
         <doxygen:param>PREDEFINED="DOXYGEN"
         <doxygen:param>QUIET=YES
diff --git a/overloaded_function/test/Jamfile.v2 b/overloaded_function/test/Jamfile.v2
index 3871ee578..a93b90a97 100644
--- a/overloaded_function/test/Jamfile.v2
+++ b/overloaded_function/test/Jamfile.v2
@@ -8,7 +8,9 @@
 import testing ;
 
 # Sun does not automatically detect type-of emulation (force it).
-project : requirements <toolset>sun:<define>BOOST_TYPEOF_EMULATION ;
+project : requirements <toolset>sun:<define>BOOST_TYPEOF_EMULATION
+    <library>/boost/functional//boost_functional
+    ;
 
 run functor.cpp ;
 run make_decl.cpp ;
diff --git a/test/Jamfile.v2 b/test/Jamfile.v2
index dbe379c0c..e492db6d5 100644
--- a/test/Jamfile.v2
+++ b/test/Jamfile.v2
@@ -4,6 +4,8 @@
 
 import testing ;
 
+project : requirements <library>/boost/functional//boost_functional ;
+
 test-suite functional :
     [ run function_test.cpp ]
     ;