diff --git a/packages/PEGTL/.clang-tidy b/packages/PEGTL/.clang-tidy
index 592618ff6ce98924adc7080d0e838288aec358c4..14eb1216c414dfe3269d2b3195855173b18299f1 100644
--- a/packages/PEGTL/.clang-tidy
+++ b/packages/PEGTL/.clang-tidy
@@ -16,6 +16,7 @@ Checks: >-
   -modernize-avoid-c-arrays,
   -modernize-concat-nested-namespaces,
   -modernize-raw-string-literal,
+  -modernize-use-trailing-return-type,
   performance-*,
   readability-*,
   -readability-avoid-const-params-in-decls,
diff --git a/packages/PEGTL/.gitrepo b/packages/PEGTL/.gitrepo
index 57a70bcf74737edad0bb2fab9edcc0d912916dfa..76f9ade4da3d712501a1125fdbd270c619586607 100644
--- a/packages/PEGTL/.gitrepo
+++ b/packages/PEGTL/.gitrepo
@@ -6,7 +6,7 @@
 [subrepo]
 	remote = git@github.com:taocpp/PEGTL.git
 	branch = master
-	commit = bbe0c12c0d6203a962b29fbb38f332f7f3131ef0
-	parent = 4e529e65898e54ed3e91b9ef0b8d11371f05ca92
+	commit = 83b6cdc717b68a3714e6c76e13dbc4a571b491c1
+	parent = 6a6f7b2c81c10365515dc8302a829ba6200d27b0
 	cmdver = 0.4.1
 	method = merge
diff --git a/packages/PEGTL/.travis.yml b/packages/PEGTL/.travis.yml
index b276d70b530f308dee32899795dad847aaee59f7..4164eefa4d0022a6126b0df99fbfcfd20f55deb5 100644
--- a/packages/PEGTL/.travis.yml
+++ b/packages/PEGTL/.travis.yml
@@ -2,126 +2,120 @@ language: generic
 os: linux
 dist: xenial
 
-matrix:
+jobs:
   include:
-    - compiler: gcc
+    - &gcc-7
+      compiler: gcc
       addons:
         apt:
-          sources: ['ubuntu-toolchain-r-test']
-          packages: ['g++-7']
+          sources: [ ubuntu-toolchain-r-test ]
+          packages: [ g++-7 ]
       env:
         - CXX=g++-7
 
-    - compiler: gcc
+    - &gcc-8
+      compiler: gcc
       addons:
         apt:
-          sources: ['ubuntu-toolchain-r-test']
-          packages: ['g++-8']
+          sources: [ ubuntu-toolchain-r-test ]
+          packages: [ g++-8 ]
       env:
         - CXX=g++-8
 
-    - compiler: gcc
-      addons:
-        apt:
-          sources: ['ubuntu-toolchain-r-test']
-          packages: ['g++-8']
+    - <<: *gcc-8
       env:
         - CXX=g++-8
-        - CPPFLAGS=-fno-rtti
+        - CPPFLAGS="-fno-rtti"
 
-    - compiler: gcc
+    - &gcc-9
+      compiler: gcc
       addons:
         apt:
-          sources: ['ubuntu-toolchain-r-test']
-          packages: ['g++-9']
+          sources: [ ubuntu-toolchain-r-test ]
+          packages: [ g++-9 ]
       env:
         - CXX=g++-9
 
     - compiler: clang
       addons:
         apt:
-          sources: ['ubuntu-toolchain-r-test', 'llvm-toolchain-xenial-5']
-          packages: ['clang-5.0', 'g++-7']
+          sources: [ ubuntu-toolchain-r-test, llvm-toolchain-xenial-5 ]
+          packages: [ clang-5.0, g++-7 ]
       env:
         - CXX=clang++-5.0
 
     - compiler: clang
       addons:
         apt:
-          sources: ['ubuntu-toolchain-r-test', 'llvm-toolchain-xenial-6']
-          packages: ['clang-6.0', 'g++-7']
+          sources: [ ubuntu-toolchain-r-test, llvm-toolchain-xenial-6 ]
+          packages: [ clang-6.0, g++-7 ]
       env:
         - CXX=clang++-6.0
 
     - compiler: clang
       addons:
         apt:
-          sources: ['ubuntu-toolchain-r-test', 'llvm-toolchain-xenial-7']
-          packages: ['clang-7', 'g++-7']
+          sources: [ ubuntu-toolchain-r-test, llvm-toolchain-xenial-7 ]
+          packages: [ clang-7, g++-7 ]
       env:
         - CXX=clang++-7
 
     - compiler: clang
       addons:
         apt:
-          sources: ['ubuntu-toolchain-r-test', 'llvm-toolchain-xenial-8']
-          packages: ['clang-8', 'g++-8']
+          sources: [ ubuntu-toolchain-r-test, llvm-toolchain-xenial-8 ]
+          packages: [ clang-8, g++-8 ]
       env:
         - CXX=clang++-8
 
     - compiler: clang
       addons:
         apt:
-          sources: ['ubuntu-toolchain-r-test', 'llvm-toolchain-xenial-8']
-          packages: ['clang-8', 'g++-8']
+          sources: &clang-9-sources
+            - ubuntu-toolchain-r-test
+            - sourceline: deb https://apt.llvm.org/xenial/ llvm-toolchain-xenial-9 main
+              key_url: https://apt.llvm.org/llvm-snapshot.gpg.key
+          packages: [ clang-9, g++-9 ]
       env:
-        - CXX=clang++-8
-        - CPPFLAGS=-fms-extensions
+        - CXX=clang++-9
 
-    - compiler: clang
+    - &clang-10
+      compiler: clang
       addons:
         apt:
-          sources: ['ubuntu-toolchain-r-test', 'llvm-toolchain-xenial-8']
-          packages: ['clang-8', 'g++-8']
+          sources: &clang-10-sources
+            - ubuntu-toolchain-r-test
+            - sourceline: deb https://apt.llvm.org/xenial/ llvm-toolchain-xenial-10 main
+              key_url: https://apt.llvm.org/llvm-snapshot.gpg.key
+          packages: [ clang-10, g++-9 ]
       env:
-        - CXX=clang++-8
-        - CPPFLAGS=-fno-rtti
+        - CXX=clang++-10
 
-    - compiler: clang
-      addons:
-        apt:
-          sources:
-            - ubuntu-toolchain-r-test
-            - sourceline: 'deb https://apt.llvm.org/xenial/ llvm-toolchain-xenial-9 main'
-              key_url: 'https://apt.llvm.org/llvm-snapshot.gpg.key'
-          packages:
-            - clang-9
-            - g++-9
+    - <<: *clang-10
       env:
-        - CXX=clang++-9
+        - CXX=clang++-10
+        - CPPFLAGS="-fms-extensions"
+
+    - <<: *clang-10
+      env:
+        - CXX=clang++-10
+        - CPPFLAGS="-fno-rtti"
 
-    - os: osx
+    - &osx
+      os: osx
       osx_image: xcode9.4
       compiler: clang
       env:
         - CXX=clang++
 
-    - os: osx
+    - <<: *osx
       osx_image: xcode10.3
-      compiler: clang
-      env:
-        - CXX=clang++
 
-    - os: osx
+    - <<: *osx
       osx_image: xcode11.3
-      compiler: clang
-      env:
-        - CXX=clang++
 
-    - compiler: clang
-      env:
-        - ANDROID_ABI=armeabi-v7a
-        - ANDROID_PLATFORM=android-22
+    - &android
+      compiler: clang
       addons:
         apt:
           packages:
@@ -131,149 +125,85 @@ matrix:
         - wget https://dl.google.com/android/repository/sdk-tools-linux-4333796.zip
         - unzip -qq sdk-tools-linux-4333796.zip -d /opt/android-sdk
         - rm sdk-tools-linux-4333796.zip
-        - echo "y" | /opt/android-sdk/tools/bin/sdkmanager "platform-tools" "system-images;android-24;default;armeabi-v7a" "platforms;android-24" "emulator" "ndk-bundle" "cmake;3.10.2.4988404" > /dev/null
+        - echo "y" | /opt/android-sdk/tools/bin/sdkmanager "platform-tools" "system-images;android-24;default;${ANDROID_ABI}" "platforms;android-24" "emulator" "ndk-bundle" "cmake;3.10.2.4988404" > /dev/null
       before_script:
         - export TERM=dumb
         - export _NO_CHECK_SIGNATURE=true
         - export ANDROID_SDK_ROOT=/opt/android-sdk
-        - echo no | /opt/android-sdk/tools/bin/avdmanager create avd -n test -k "system-images;android-24;default;armeabi-v7a"
+        - echo no | /opt/android-sdk/tools/bin/avdmanager create avd -n test -k "system-images;android-24;default;${ANDROID_ABI}"
         - /opt/android-sdk/emulator/emulator -avd test -no-audio -no-window -dns-server 8.8.8.8 &
         #- android-wait-for-emulator || android-wait-for-emulator
         - /opt/android-sdk/platform-tools/adb shell input keyevent 82 &
       script:
         # Using the ninja build command. Is much faster then make build command.
-        - /opt/android-sdk/cmake/3.10.2.4988404/bin/cmake -H. -Bcmake-build -GNinja -DANDROID_ABI=armeabi-v7a -DCMAKE_BUILD_TYPE=Release -DCMAKE_TOOLCHAIN_FILE=/opt/android-sdk/ndk-bundle/build/cmake/android.toolchain.cmake -DANDROID_PLATFORM=android-22 -DCMAKE_MAKE_PROGRAM=/opt/android-sdk/cmake/3.10.2.4988404/bin/ninja -DPEGTL_BUILD_EXAMPLES=OFF
+        - /opt/android-sdk/cmake/3.10.2.4988404/bin/cmake -H. -Bcmake-build -GNinja -DANDROID_ABI=${ANDROID_ABI} -DCMAKE_BUILD_TYPE=Release -DCMAKE_TOOLCHAIN_FILE=/opt/android-sdk/ndk-bundle/build/cmake/android.toolchain.cmake -DANDROID_PLATFORM=${ANDROID_PLATFORM} -DCMAKE_MAKE_PROGRAM=/opt/android-sdk/cmake/3.10.2.4988404/bin/ninja -DPEGTL_BUILD_EXAMPLES=OFF
         - /opt/android-sdk/cmake/3.10.2.4988404/bin/cmake --build cmake-build --target all
         # FIXME android emulator stuck sometimes - cd cmake-build && /opt/android-sdk/cmake/3.10.2.4988404/bin/ctest --output-on-failure
+      env:
+        - ANDROID_ABI=armeabi-v7a
+        - ANDROID_PLATFORM=android-22
 
-    - compiler: clang
+    - <<: *android
       env:
         - ANDROID_ABI=armeabi-v7a
         - ANDROID_PLATFORM=android-24
-      addons:
-        apt:
-          packages:
-            - openjdk-8-jdk
-      before_install:
-        - export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64
-        - wget https://dl.google.com/android/repository/sdk-tools-linux-4333796.zip
-        - unzip -qq sdk-tools-linux-4333796.zip -d /opt/android-sdk
-        - rm sdk-tools-linux-4333796.zip
-        - echo "y" | /opt/android-sdk/tools/bin/sdkmanager "platform-tools" "system-images;android-24;default;armeabi-v7a" "platforms;android-24" "emulator" "ndk-bundle" "cmake;3.10.2.4988404" > /dev/null
-      before_script:
-        - export TERM=dumb
-        - export _NO_CHECK_SIGNATURE=true
-        - export ANDROID_SDK_ROOT=/opt/android-sdk
-        - echo no | /opt/android-sdk/tools/bin/avdmanager create avd -n test -k "system-images;android-24;default;armeabi-v7a"
-        - /opt/android-sdk/emulator/emulator -avd test -no-audio -no-window -dns-server 8.8.8.8 &
-        #- android-wait-for-emulator || android-wait-for-emulator
-        - /opt/android-sdk/platform-tools/adb shell input keyevent 82 &
-      script:
-        # Using the ninja build command. Is much faster then make build command.
-        - /opt/android-sdk/cmake/3.10.2.4988404/bin/cmake -H. -Bcmake-build -GNinja -DANDROID_ABI=armeabi-v7a -DCMAKE_BUILD_TYPE=Release -DCMAKE_TOOLCHAIN_FILE=/opt/android-sdk/ndk-bundle/build/cmake/android.toolchain.cmake -DANDROID_PLATFORM=android-24 -DCMAKE_MAKE_PROGRAM=/opt/android-sdk/cmake/3.10.2.4988404/bin/ninja -DPEGTL_BUILD_EXAMPLES=OFF
-        - /opt/android-sdk/cmake/3.10.2.4988404/bin/cmake --build cmake-build --target all
-        # FIXME android emulator stuck sometimes - cd cmake-build && /opt/android-sdk/cmake/3.10.2.4988404/bin/ctest --output-on-failure
 
-    - compiler: clang
+    - <<: *android
       env:
         - ANDROID_ABI=arm64-v8a
         - ANDROID_PLATFORM=android-24
-      addons:
-        apt:
-          packages:
-            - openjdk-8-jdk
-      before_install:
-        - export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64
-        - wget https://dl.google.com/android/repository/sdk-tools-linux-4333796.zip
-        - unzip -qq sdk-tools-linux-4333796.zip -d /opt/android-sdk
-        - rm sdk-tools-linux-4333796.zip
-        - echo "y" | /opt/android-sdk/tools/bin/sdkmanager "platform-tools" "system-images;android-24;default;arm64-v8a" "platforms;android-24" "emulator" "ndk-bundle" "cmake;3.10.2.4988404" > /dev/null
-      before_script:
-        - export TERM=dumb
-        - export _NO_CHECK_SIGNATURE=true
-        - export ANDROID_SDK_ROOT=/opt/android-sdk
-        - echo no | /opt/android-sdk/tools/bin/avdmanager create avd -n test -k "system-images;android-24;default;arm64-v8a"
-        - /opt/android-sdk/emulator/emulator -avd test -no-audio -no-window -dns-server 8.8.8.8 &
-        #- android-wait-for-emulator || android-wait-for-emulator
-        - /opt/android-sdk/platform-tools/adb shell input keyevent 82 &
-      script:
-        # Using the ninja build command. Is much faster then make build command.
-        - /opt/android-sdk/cmake/3.10.2.4988404/bin/cmake -H. -Bcmake-build -GNinja -DANDROID_ABI=arm64-v8a -DCMAKE_BUILD_TYPE=Release -DCMAKE_TOOLCHAIN_FILE=/opt/android-sdk/ndk-bundle/build/cmake/android.toolchain.cmake -DANDROID_PLATFORM=android-24 -DCMAKE_MAKE_PROGRAM=/opt/android-sdk/cmake/3.10.2.4988404/bin/ninja -DPEGTL_BUILD_EXAMPLES=OFF
-        - /opt/android-sdk/cmake/3.10.2.4988404/bin/cmake --build cmake-build --target all
-        # FIXME android emulator stuck sometimes- cd cmake-build && /opt/android-sdk/cmake/3.10.2.4988404/bin/ctest --output-on-failure
 
-    - compiler: gcc
-      addons:
-        apt:
-          sources: ['ubuntu-toolchain-r-test']
-          packages: ['g++-9']
+    - <<: *gcc-9
       env:
         - CXX=g++-9
         - CPPFLAGS="-fsanitize=undefined -fuse-ld=gold"
 
-    - compiler: gcc
-      sudo: true
-      addons:
-        apt:
-          sources: ['ubuntu-toolchain-r-test']
-          packages: ['g++-9']
+    - <<: *gcc-9
       env:
         - CXX=g++-9
         - CPPFLAGS="-fsanitize=address -fuse-ld=gold"
 
-    - compiler: clang
-      addons:
-        apt:
-          sources: ['ubuntu-toolchain-r-test', 'llvm-toolchain-xenial-8']
-          packages: ['clang-8', 'g++-8']
+    - <<: *clang-10
       env:
-        - CXX=clang++-8
-        - CPPFLAGS=-fsanitize=undefined
+        - CXX=clang++-10
+        - CPPFLAGS="-fsanitize=undefined"
 
-    - compiler: clang
-      sudo: true
-      addons:
-        apt:
-          sources: ['ubuntu-toolchain-r-test', 'llvm-toolchain-xenial-8']
-          packages: ['clang-8', 'g++-8']
+    - <<: *clang-10
       env:
-        - CXX=clang++-8
-        - CPPFLAGS=-fsanitize=address
+        - CXX=clang++-10
+        - CPPFLAGS="-fsanitize=address"
 
     - compiler: clang
       addons:
         apt:
-          sources: ['ubuntu-toolchain-r-test', 'llvm-toolchain-xenial-8']
-          packages: ['clang-8', 'clang-tidy-8', 'g++-8']
+          sources: *clang-10-sources
+          packages: [ clang-10, clang-tidy-10, g++-9 ]
       env:
-        - CLANG_TIDY=clang-tidy-8
+        - CXX=clang++-10
+        - CLANG_TIDY=clang-tidy-10
       script:
         - make -kj3 clang-tidy
 
     - compiler: clang
       addons:
         apt:
-          sources: ['ubuntu-toolchain-r-test', 'llvm-toolchain-xenial-8']
-          packages: ['clang-8', 'clang-tools-8', 'g++-8']
+          sources: *clang-10-sources
+          packages: [ clang-tools-10, g++-9 ]
       script:
-        - scan-build-8 --use-c++=clang++-8 --status-bugs make -kj3
+        - scan-build-10 --use-c++=clang++-10 --status-bugs make -kj3
 
     - compiler: gcc
       addons:
         apt:
-          sources: ['ubuntu-toolchain-r-test']
-          packages: ['g++-9', 'valgrind']
+          sources: [ ubuntu-toolchain-r-test ]
+          packages: [ g++-9, valgrind ]
       env:
         - CXX=g++-9
         - SPECIAL=valgrind
       script:
         - make -kj3 valgrind
 
-    - compiler: gcc
-      addons:
-        apt:
-          sources: ['ubuntu-toolchain-r-test']
-          packages: ['g++-7']
+    - <<: *gcc-7
       env:
         - CXX=g++-7
         - CXXFLAGS="-O0 --coverage"
@@ -286,10 +216,10 @@ matrix:
     - compiler: clang
       addons:
         apt:
-          sources: ['ubuntu-toolchain-r-test', 'llvm-toolchain-xenial-8']
-          packages: ['clang-format-8', 'g++-8']
+          sources: *clang-9-sources
+          packages: [ clang-format-9, g++-9 ]
       script:
-        - clang-format-8 -i -style=file $(find . -name '[^.]*.[hc]pp')
+        - clang-format-9 -i -style=file $(find . -name '[^.]*.[hc]pp')
         - git diff --exit-code
 
 script:
diff --git a/packages/PEGTL/README.md b/packages/PEGTL/README.md
index 1f8a3df3bf7dde49b26a0bc669616574aa4db8f3..e7d168d600b2cb3c23f05579b31b0a3b5c7ea725 100644
--- a/packages/PEGTL/README.md
+++ b/packages/PEGTL/README.md
@@ -67,12 +67,12 @@ Each commit is automatically tested with multiple architectures, operating syste
 
   * macOS 10.13, Xcode 9.4
   * macOS 10.14, Xcode 10.3
-  * macOS 10.14, Xcode 11.2
+  * macOS 10.14, Xcode 11.3
 
 * Ubuntu 16.04 LTS (using libstdc++)
 
   * GCC 7.x, 8.x, 9.x
-  * Clang 5.x, 6.x, 7.x, 8.x, 9.x
+  * Clang 5.x, 6.x, 7.x, 8.x, 9.x, 10.x
 
 Additionally, each commit is checked with Clang's [Static Analyzer](https://clang-analyzer.llvm.org/), GCC's and Clang's [sanitizers](https://github.com/google/sanitizers), [`clang-tidy`](http://clang.llvm.org/extra/clang-tidy/), and [`valgrind`](http://valgrind.org/).
 Code coverage is automatically measured and the unit tests cover 100% of the core library code (for releases).
@@ -81,15 +81,6 @@ Code coverage is automatically measured and the unit tests cover 100% of the cor
 Incompatible API changes are *only* allowed to occur between major versions.
 For details see the [changelog](doc/Changelog.md).
 
-## Package Managers
-
-You can download and install the PEGTL using the [Conan](https://github.com/conan-io/conan) package manager:
-
-    conan install taocpp-pegtl/2.8.1@
-
-The taocpp-pegtl package in conan is kept up to date by Conan team members and community contributors.
-If the version is out-of-date, please [create an issue or pull request](https://github.com/conan-io/conan-center-index) on the Conan Center Index repository.
-
 ## Thank You
 
 In appreciation of all contributions here are the people that have [directly contributed](https://github.com/taocpp/PEGTL/graphs/contributors) to the PEGTL and/or its development.
diff --git a/packages/PEGTL/doc/Changelog.md b/packages/PEGTL/doc/Changelog.md
index d1e9c0d74c785726d7745aac59b1f0aad15eebbc..25c9c3738ad28483b3834d784917f3ce1f000563 100644
--- a/packages/PEGTL/doc/Changelog.md
+++ b/packages/PEGTL/doc/Changelog.md
@@ -26,6 +26,12 @@
 * Refactored parse tree type storage/handling.
   * Removes the need for RTTI.
 
+## 2.8.2
+
+Released 2020-04-05
+
+* Fixed parse tree node generation to correctly remove intermediate nodes.
+
 ## 2.8.1
 
 Released 2019-08-06
diff --git a/packages/PEGTL/doc/Installing-and-Using.md b/packages/PEGTL/doc/Installing-and-Using.md
index 8338d8d3602bd8953d35e28060854e839383ad97..ec4302e1314688def828e3c9f9737b5f0202c3bc 100644
--- a/packages/PEGTL/doc/Installing-and-Using.md
+++ b/packages/PEGTL/doc/Installing-and-Using.md
@@ -4,14 +4,12 @@
 
 * [Requirements](#requirements)
 * [Installation Packages](#installation-packages)
+* [Using Conan](#using-conan)
 * [Using CMake](#using-cmake)
   * [CMake Installation](#cmake-installation)
   * [`find_package`](#find_package)
   * [`add_subdirectory`](#add_subdirectory)
   * [Mixing `find_package` and `add_subdirectory`](#mixing-find_package-and-add_subdirectory)
-* [Conan](#conan)
-  * [Using a development version](#using-a-development-version)
-  * [Developing with conan editable](#developing-with-conan-editable)
 * [Manual Installation](#manual-installation)
 * [Embedding the PEGTL](#embedding-the-pegtl)
   * [Embedding in Binaries](#embedding-in-binaries)
@@ -45,14 +43,27 @@ the `-pedantic`, `-Wall`, `-Wextra` and `-Werror` compiler switches.
 
 ## Installation Packages
 
-Installation packages are available from several package managers. Note that some of the listed packages are not updated regularly.
+Installation packages are available from several package managers.
+Note that some of the listed packages are not updated regularly.
 
 [![Packaging status](https://repology.org/badge/vertical-allrepos/pegtl.svg)](https://repology.org/metapackage/pegtl)
 
-### Other
+## Using Conan
 
-* [Conan]
-* [Spack]
+You can download and install the PEGTL using the [Conan] package manager:
+
+```bash
+conan install taocpp-pegtl/<version>@
+```
+
+where `<version>` is the version of the PEGTL you want to use.
+
+The `taocpp-pegtl` package in Conan is kept up to date by Conan team members
+and community contributors. If the version is out-of-date, please
+[create an issue or pull request](https://github.com/conan-io/conan-center-index)
+on the Conan Center Index repository.
+
+For more options and ways to use Conan, please refer to the [Conan documentation].
 
 ## Using CMake
 
@@ -117,8 +128,8 @@ are also defined.
 ### Mixing `find_package` and `add_subdirectory`
 
 With the advent of improved methods of managing dependencies (such as [Conan],
-[Spack], [CMake FetchContent]), multiple package inclusion methods needs to be
-able to co-exist.
+[CMake FetchContent]), multiple package inclusion methods needs to be able to
+co-exist.
 
 If PEGTL was first included with `find_package` then subsequent calls to
 `add_subdirectory(path/to/PEGTL)` will skip over the body of the
@@ -135,42 +146,7 @@ two different versions of PEGTL simultaneously and signalling a fatal error
 becomes the only practical way of handling the inclusion of multiple different
 PEGTL versions.
 
-For more options and ways to use CMake, please refer to the
-[CMake documentation].
-
-Conan
----
-
-The [PEGTL conan package](https://bintray.com/conan/conan-center/taocpp-pegtl%3A_) is updated by Conan Center Index.
-
-Simply add
-
-```ini
-pegtl/<version>@
-```
-
-as a dependency to your conan project where `<version>` is the version of PEGTL you want to use.
-
-### Developing with conan editable
-
-If it is required to develop PEGTL alongside another library/application then the package can be put into editable mode with
-
-```bash
-conan editable add . pegtl/<version>@
-```
-
-If the editable layout has `[builddirs]` set correctly and one is using the `cmake_paths` or `cmake`generator
-
-```cmake
-find_package(pegtl)
-```
-
-will work as expected. It will find the editable package and add it to the current CMake project. An editable package implies that it is under development so tests and examples will be automatically built unless `PEGTL_BUILD_TESTS` and `PEGTL_BUILD_EXAMPLES` are turned off.
-
-Caveats with the editable package:
-
-- Currently, if the package is included with `CONAN_PKG::pegtl` or used in a build system other than CMake then the tests and examples won't be built as the CMake config script is bypassed.
-- CMake will compulsively rebuild tests and examples if the build directory is reconfigured from another directory.
+For more options and ways to use CMake, please refer to the [CMake documentation].
 
 ## Manual Installation
 
@@ -269,12 +245,15 @@ In a Unix-shell, the following command will achieve this:
 $ make amalgamate
 ```
 
-The above will generate a `build/amalgamated/pegtl.hpp` which will consist of the headers `tao/pegtl.hpp`, `tao/pegtl/analyze.hpp`, their dependencies, and all headers in `tao/pegtl/contrib/` except for the headers in `tao/pegtl/contrib/icu/`.
+The above will generate a `build/amalgamated/pegtl.hpp` which will consist of
+the headers `tao/pegtl.hpp`, `tao/pegtl/analyze.hpp`, their dependencies,
+and all headers in `tao/pegtl/contrib/` except for the headers in
+`tao/pegtl/contrib/icu/`.
 
 Copyright (c) 2014-2020 Dr. Colin Hirsch and Daniel Frey
 
+[Conan]: https://conan.io/
+[Conan documentation]: https://docs.conan.io/
 [CMake]: https://cmake.org/
 [CMake documentation]: https://cmake.org/documentation/
 [CMake FetchContent]: https://cmake.org/cmake/help/latest/module/FetchContent.html
-[Conan]: https://bintray.com/taocpp/public-conan/pegtl%3Ataocpp
-[Spack]: http://spack.readthedocs.io/en/latest/package_list.html#pegtl
diff --git a/packages/PEGTL/doc/README.md b/packages/PEGTL/doc/README.md
index 2de138962698e7fa4d18299d24721bf8a8df7581..333592dd355f0ebefa60a54bfd8c2fdfeb6ef0b6 100644
--- a/packages/PEGTL/doc/README.md
+++ b/packages/PEGTL/doc/README.md
@@ -5,6 +5,7 @@
 * [Installing and Using](Installing-and-Using.md)
   * [Requirements](Installing-and-Using.md#requirements)
   * [Installation Packages](Installing-and-Using.md#installation-packages)
+  * [Using Conan](Installing-and-Using.md#using-conan)
   * [Using CMake](Installing-and-Using.md#using-cmake)
     * [CMake Installation](Installing-and-Using.md#cmake-installation)
     * [`find_package`](Installing-and-Using.md#find_package)
diff --git a/packages/PEGTL/include/tao/pegtl/analysis/analyze_cycles.hpp b/packages/PEGTL/include/tao/pegtl/analysis/analyze_cycles.hpp
index e62cbcc2c394d43892e96f663f17c98b8b3e6b32..8b8e5d3daef149fc16681134c4de008e140a803a 100644
--- a/packages/PEGTL/include/tao/pegtl/analysis/analyze_cycles.hpp
+++ b/packages/PEGTL/include/tao/pegtl/analysis/analyze_cycles.hpp
@@ -27,8 +27,7 @@ namespace TAO_PEGTL_NAMESPACE::analysis
       explicit analyze_cycles_impl( const bool verbose ) noexcept
          : m_verbose( verbose ),
            m_problems( 0 )
-      {
-      }
+      {}
 
       const bool m_verbose;
       unsigned m_problems;
diff --git a/packages/PEGTL/include/tao/pegtl/analysis/counted.hpp b/packages/PEGTL/include/tao/pegtl/analysis/counted.hpp
index face1897a9892e786bc55d4d9993f9627064319a..63773db19c21623dc9b646d5785fbd5e7bcabb2b 100644
--- a/packages/PEGTL/include/tao/pegtl/analysis/counted.hpp
+++ b/packages/PEGTL/include/tao/pegtl/analysis/counted.hpp
@@ -15,8 +15,7 @@ namespace TAO_PEGTL_NAMESPACE::analysis
    template< rule_type Type, std::size_t Count, typename... Rules >
    struct counted
       : generic< ( Count != 0 ) ? Type : rule_type::opt, Rules... >
-   {
-   };
+   {};
 
 }  // namespace TAO_PEGTL_NAMESPACE::analysis
 
diff --git a/packages/PEGTL/include/tao/pegtl/analysis/generic.hpp b/packages/PEGTL/include/tao/pegtl/analysis/generic.hpp
index 17c002be8dab2b5cf0790ea996cc071a7915ced2..ddf3a9c9aea56de2f40e3e4ee3704cf1c7e34c2c 100644
--- a/packages/PEGTL/include/tao/pegtl/analysis/generic.hpp
+++ b/packages/PEGTL/include/tao/pegtl/analysis/generic.hpp
@@ -7,7 +7,6 @@
 #include "../config.hpp"
 
 #include "grammar_info.hpp"
-#include "insert_rules.hpp"
 #include "rule_type.hpp"
 
 namespace TAO_PEGTL_NAMESPACE::analysis
@@ -20,7 +19,7 @@ namespace TAO_PEGTL_NAMESPACE::analysis
       {
          const auto [ it, success ] = g.insert< Name >( Type );
          if( success ) {
-            insert_rules< Rules... >::insert( g, it->second );
+            ( it->second.rules.emplace_back( Rules::analyze_t::template insert< Rules >( g ) ), ... );
          }
          return it->first;
       }
diff --git a/packages/PEGTL/include/tao/pegtl/analysis/insert_guard.hpp b/packages/PEGTL/include/tao/pegtl/analysis/insert_guard.hpp
index 727e976aa450e9f2c12e33d7bbed7bb3cc6e0138..5ced82dcde374720ae33a7398b00b9788b0ab1d7 100644
--- a/packages/PEGTL/include/tao/pegtl/analysis/insert_guard.hpp
+++ b/packages/PEGTL/include/tao/pegtl/analysis/insert_guard.hpp
@@ -17,8 +17,7 @@ namespace TAO_PEGTL_NAMESPACE::analysis
       insert_guard( C& container, const typename C::value_type& value )
          : m_i( container.insert( value ) ),
            m_c( container )
-      {
-      }
+      {}
 
       insert_guard( const insert_guard& ) = delete;
       insert_guard( insert_guard&& ) = delete;
diff --git a/packages/PEGTL/include/tao/pegtl/analysis/insert_rules.hpp b/packages/PEGTL/include/tao/pegtl/analysis/insert_rules.hpp
deleted file mode 100644
index 8f636e429dd7e6779e787c6af4df4bb2e969e116..0000000000000000000000000000000000000000
--- a/packages/PEGTL/include/tao/pegtl/analysis/insert_rules.hpp
+++ /dev/null
@@ -1,25 +0,0 @@
-// Copyright (c) 2014-2020 Dr. Colin Hirsch and Daniel Frey
-// Please see LICENSE for license or visit https://github.com/taocpp/PEGTL/
-
-#ifndef TAO_PEGTL_ANALYSIS_INSERT_RULES_HPP
-#define TAO_PEGTL_ANALYSIS_INSERT_RULES_HPP
-
-#include "../config.hpp"
-
-#include "grammar_info.hpp"
-#include "rule_info.hpp"
-
-namespace TAO_PEGTL_NAMESPACE::analysis
-{
-   template< typename... Rules >
-   struct insert_rules
-   {
-      static void insert( grammar_info& g, rule_info& r )
-      {
-         ( r.rules.emplace_back( Rules::analyze_t::template insert< Rules >( g ) ), ... );
-      }
-   };
-
-}  // namespace TAO_PEGTL_NAMESPACE::analysis
-
-#endif
diff --git a/packages/PEGTL/include/tao/pegtl/analysis/rule_info.hpp b/packages/PEGTL/include/tao/pegtl/analysis/rule_info.hpp
index 576163a1dff24518f80cc447ff79fce3abfe02d5..68dc182672283c0bad2844ad51adec1f5b32829e 100644
--- a/packages/PEGTL/include/tao/pegtl/analysis/rule_info.hpp
+++ b/packages/PEGTL/include/tao/pegtl/analysis/rule_info.hpp
@@ -17,8 +17,7 @@ namespace TAO_PEGTL_NAMESPACE::analysis
    {
       explicit rule_info( const rule_type in_type ) noexcept
          : type( in_type )
-      {
-      }
+      {}
 
       rule_type type;
       std::vector< std::string > rules;
diff --git a/packages/PEGTL/include/tao/pegtl/argv_input.hpp b/packages/PEGTL/include/tao/pegtl/argv_input.hpp
index f727442b8337a621549e24830162fe97a03c9b67..741a3574ddf2ab2de83afd677237f19382826512 100644
--- a/packages/PEGTL/include/tao/pegtl/argv_input.hpp
+++ b/packages/PEGTL/include/tao/pegtl/argv_input.hpp
@@ -34,13 +34,11 @@ namespace TAO_PEGTL_NAMESPACE
       template< typename T >
       argv_input( char** argv, const std::size_t argn, T&& in_source )
          : memory_input< P, Eol >( static_cast< const char* >( argv[ argn ] ), std::forward< T >( in_source ) )
-      {
-      }
+      {}
 
       argv_input( char** argv, const std::size_t argn )
          : argv_input( argv, argn, internal::make_argv_source( argn ) )
-      {
-      }
+      {}
    };
 
    template< typename... Ts >
diff --git a/packages/PEGTL/include/tao/pegtl/contrib/icu/utf16.hpp b/packages/PEGTL/include/tao/pegtl/contrib/icu/utf16.hpp
index 24a8c23ce6f897b050669bd48a3afee8c5cdaac9..bc5ee54365e9cdd1fa5d05cca7947404c42a308e 100644
--- a/packages/PEGTL/include/tao/pegtl/contrib/icu/utf16.hpp
+++ b/packages/PEGTL/include/tao/pegtl/contrib/icu/utf16.hpp
@@ -18,14 +18,12 @@ namespace TAO_PEGTL_NAMESPACE
       template< UProperty P, bool V = true >
       struct binary_property
          : internal::icu::binary_property< internal::peek_utf16_be, P, V >
-      {
-      };
+      {};
 
       template< UProperty P, int V >
       struct property_value
          : internal::icu::property_value< internal::peek_utf16_be, P, V >
-      {
-      };
+      {};
 
       // clang-format off
       struct alphabetic : binary_property< UCHAR_ALPHABETIC > {};
@@ -109,14 +107,12 @@ namespace TAO_PEGTL_NAMESPACE
       template< UProperty P, bool V = true >
       struct binary_property
          : internal::icu::binary_property< internal::peek_utf16_le, P, V >
-      {
-      };
+      {};
 
       template< UProperty P, int V >
       struct property_value
          : internal::icu::property_value< internal::peek_utf16_le, P, V >
-      {
-      };
+      {};
 
       // clang-format off
       struct alphabetic : binary_property< UCHAR_ALPHABETIC > {};
diff --git a/packages/PEGTL/include/tao/pegtl/contrib/icu/utf32.hpp b/packages/PEGTL/include/tao/pegtl/contrib/icu/utf32.hpp
index 9d93323081ad128a42efc1dd64bc6f79f1929c72..54cfe071d28b374f50521325d0868216abc82118 100644
--- a/packages/PEGTL/include/tao/pegtl/contrib/icu/utf32.hpp
+++ b/packages/PEGTL/include/tao/pegtl/contrib/icu/utf32.hpp
@@ -18,14 +18,12 @@ namespace TAO_PEGTL_NAMESPACE
       template< UProperty P, bool V = true >
       struct binary_property
          : internal::icu::binary_property< internal::peek_utf32_be, P, V >
-      {
-      };
+      {};
 
       template< UProperty P, int V >
       struct property_value
          : internal::icu::property_value< internal::peek_utf32_be, P, V >
-      {
-      };
+      {};
 
       // clang-format off
       struct alphabetic : binary_property< UCHAR_ALPHABETIC > {};
@@ -109,14 +107,12 @@ namespace TAO_PEGTL_NAMESPACE
       template< UProperty P, bool V = true >
       struct binary_property
          : internal::icu::binary_property< internal::peek_utf32_le, P, V >
-      {
-      };
+      {};
 
       template< UProperty P, int V >
       struct property_value
          : internal::icu::property_value< internal::peek_utf32_le, P, V >
-      {
-      };
+      {};
 
       // clang-format off
       struct alphabetic : binary_property< UCHAR_ALPHABETIC > {};
diff --git a/packages/PEGTL/include/tao/pegtl/contrib/icu/utf8.hpp b/packages/PEGTL/include/tao/pegtl/contrib/icu/utf8.hpp
index 4df89677858c5edbcd6451adc7f87b220c9a4b61..aaf6838d3051082c8975ace45fe06ead8c6483af 100644
--- a/packages/PEGTL/include/tao/pegtl/contrib/icu/utf8.hpp
+++ b/packages/PEGTL/include/tao/pegtl/contrib/icu/utf8.hpp
@@ -16,14 +16,12 @@ namespace TAO_PEGTL_NAMESPACE::utf8::icu
    template< UProperty P, bool V = true >
    struct binary_property
       : internal::icu::binary_property< internal::peek_utf8, P, V >
-   {
-   };
+   {};
 
    template< UProperty P, int V >
    struct property_value
       : internal::icu::property_value< internal::peek_utf8, P, V >
-   {
-   };
+   {};
 
    // clang-format off
    struct alphabetic : binary_property< UCHAR_ALPHABETIC > {};
diff --git a/packages/PEGTL/include/tao/pegtl/contrib/if_then.hpp b/packages/PEGTL/include/tao/pegtl/contrib/if_then.hpp
index fa50ccd8adf96e88b4ddbae4dbf266dcb8eed352..22e97247f4cd4e1bf89b32e7f0be4d73f79e27ae 100644
--- a/packages/PEGTL/include/tao/pegtl/contrib/if_then.hpp
+++ b/packages/PEGTL/include/tao/pegtl/contrib/if_then.hpp
@@ -19,8 +19,7 @@ namespace TAO_PEGTL_NAMESPACE
    {
       template< typename Cond, typename Then >
       struct if_pair
-      {
-      };
+      {};
 
       template< typename... Pairs >
       struct if_then;
@@ -39,8 +38,7 @@ namespace TAO_PEGTL_NAMESPACE
       template<>
       struct if_then<>
          : trivial< false >
-      {
-      };
+      {};
 
       template< typename... Pairs >
       inline constexpr bool skip_control< if_then< Pairs... > > = true;
diff --git a/packages/PEGTL/include/tao/pegtl/contrib/parse_tree.hpp b/packages/PEGTL/include/tao/pegtl/contrib/parse_tree.hpp
index a6f70b490796f7770478de2cfa858d9ca280434e..67bde63ed73bd3c97bcd1f0f000f3e4cd91c52fd 100644
--- a/packages/PEGTL/include/tao/pegtl/contrib/parse_tree.hpp
+++ b/packages/PEGTL/include/tao/pegtl/contrib/parse_tree.hpp
@@ -24,7 +24,8 @@
 #include "../analysis/generic.hpp"
 #include "../internal/demangle.hpp"
 #include "../internal/iterator.hpp"
-#include "../internal/seq.hpp"
+#include "../internal/skip_control.hpp"
+#include "../internal/try_catch_type.hpp"
 
 namespace TAO_PEGTL_NAMESPACE::parse_tree
 {
@@ -131,8 +132,7 @@ namespace TAO_PEGTL_NAMESPACE::parse_tree
       // if parsing of the rule failed, this method is called
       template< typename Rule, typename Input, typename... States >
       void failure( const Input& /*unused*/, States&&... /*unused*/ ) noexcept
-      {
-      }
+      {}
 
       // if parsing succeeded and the (optional) transform call
       // did not discard the node, it is appended to its parent.
@@ -148,18 +148,17 @@ namespace TAO_PEGTL_NAMESPACE::parse_tree
 
    struct node
       : basic_node< node >
-   {
-   };
+   {};
 
    namespace internal
    {
       template< typename >
-      struct is_seq
+      struct is_try_catch_type
          : std::false_type
       {};
 
-      template< typename... Rules >
-      struct is_seq< TAO_PEGTL_NAMESPACE::internal::seq< Rules... > >
+      template< typename Exception, typename... Rules >
+      struct is_try_catch_type< TAO_PEGTL_NAMESPACE::internal::try_catch_type< Exception, Rules... > >
          : std::true_type
       {};
 
@@ -193,8 +192,7 @@ namespace TAO_PEGTL_NAMESPACE::parse_tree
 
       template< typename Selector, typename... Parameters >
       void transform( Parameters&&... /*unused*/ ) noexcept
-      {
-      }
+      {}
 
       template< typename Selector, typename Input, typename Node, typename... States >
       auto transform( const Input& in, std::unique_ptr< Node >& n, States&&... st ) noexcept( noexcept( Selector::transform( in, n, st... ) ) )
@@ -213,47 +211,40 @@ namespace TAO_PEGTL_NAMESPACE::parse_tree
       template< unsigned Level, typename Analyse, template< typename... > class Selector >
       struct is_leaf
          : std::false_type
-      {
-      };
+      {};
 
       template< analysis::rule_type Type, template< typename... > class Selector >
       struct is_leaf< 0, analysis::generic< Type >, Selector >
          : std::true_type
-      {
-      };
+      {};
 
       template< analysis::rule_type Type, std::size_t Count, template< typename... > class Selector >
       struct is_leaf< 0, analysis::counted< Type, Count >, Selector >
          : std::true_type
-      {
-      };
+      {};
 
       template< analysis::rule_type Type, typename... Rules, template< typename... > class Selector >
       struct is_leaf< 0, analysis::generic< Type, Rules... >, Selector >
          : std::false_type
-      {
-      };
+      {};
 
       template< analysis::rule_type Type, std::size_t Count, typename... Rules, template< typename... > class Selector >
       struct is_leaf< 0, analysis::counted< Type, Count, Rules... >, Selector >
          : std::false_type
-      {
-      };
+      {};
 
       template< unsigned Level, typename Rule, template< typename... > class Selector >
-      inline constexpr bool is_unselected_leaf = !Selector< Rule >::value && is_leaf< Level, typename Rule::analyze_t, Selector >::value;
+      inline constexpr bool is_unselected_leaf = ( TAO_PEGTL_NAMESPACE::internal::skip_control< Rule > || !Selector< Rule >::value ) && is_leaf< Level, typename Rule::analyze_t, Selector >::value;
 
       template< unsigned Level, analysis::rule_type Type, typename... Rules, template< typename... > class Selector >
       struct is_leaf< Level, analysis::generic< Type, Rules... >, Selector >
          : std::bool_constant< ( is_unselected_leaf< Level - 1, Rules, Selector > && ... ) >
-      {
-      };
+      {};
 
       template< unsigned Level, analysis::rule_type Type, std::size_t Count, typename... Rules, template< typename... > class Selector >
       struct is_leaf< Level, analysis::counted< Type, Count, Rules... >, Selector >
          : std::bool_constant< ( is_unselected_leaf< Level - 1, Rules, Selector > && ... ) >
-      {
-      };
+      {};
 
       template< typename T >
       struct control
@@ -355,7 +346,7 @@ namespace TAO_PEGTL_NAMESPACE::parse_tree
          struct state_handler;
 
          template< typename Rule >
-         using type = control< state_handler< Rule, Selector< Rule >::value, is_leaf< 8, typename Rule::analyze_t, Selector >::value > >;
+         using type = control< state_handler< Rule, !TAO_PEGTL_NAMESPACE::internal::skip_control< Rule > && Selector< Rule >::value, is_leaf< 8, typename Rule::analyze_t, Selector >::value > >;
       };
 
       template< typename Node, template< typename... > class Selector, template< typename... > class Control >
@@ -388,28 +379,62 @@ namespace TAO_PEGTL_NAMESPACE::parse_tree
          : Control< Rule >
       {
          template< typename Input, typename... States >
-         static void start( const Input& in, state< Node >& state, States&&... st )
+         static void start( const Input& in, state< Node >& /*unused*/, States&&... st ) noexcept( noexcept( Control< Rule >::start( in, st... ) ) )
          {
             Control< Rule >::start( in, st... );
-            state.emplace_back();
          }
 
          template< typename Input, typename... States >
-         static void success( const Input& in, state< Node >& state, States&&... st )
+         static void success( const Input& in, state< Node >& /*unused*/, States&&... st ) noexcept( noexcept( Control< Rule >::success( in, st... ) ) )
          {
             Control< Rule >::success( in, st... );
-            auto n = std::move( state.back() );
-            state.pop_back();
-            for( auto& c : n->children ) {
-               state.back()->children.emplace_back( std::move( c ) );
-            }
          }
 
          template< typename Input, typename... States >
-         static void failure( const Input& in, state< Node >& state, States&&... st ) noexcept( noexcept( Control< Rule >::failure( in, st... ) ) )
+         static void failure( const Input& in, state< Node >& /*unused*/, States&&... st ) noexcept( noexcept( Control< Rule >::failure( in, st... ) ) )
          {
             Control< Rule >::failure( in, st... );
-            state.pop_back();
+         }
+
+         template< apply_mode A,
+                   rewind_mode M,
+                   template< typename... >
+                   class Action,
+                   template< typename... >
+                   class Control2,
+                   typename Input,
+                   typename... States >
+         [[nodiscard]] static bool match( Input& in, States&&... st )
+         {
+            auto& state = std::get< sizeof...( st ) - 1 >( std::tie( st... ) );
+            if constexpr( is_try_catch_type< Rule >::value ) {
+               internal::state< Node > tmp;
+               tmp.emplace_back();
+               tmp.stack.swap( state.stack );
+               const bool result = Control< Rule >::template match< A, M, Action, Control2 >( in, st... );
+               tmp.stack.swap( state.stack );
+               if( result ) {
+                  for( auto& c : tmp.back()->children ) {
+                     state.back()->children.emplace_back( std::move( c ) );
+                  }
+               }
+               return result;
+            }
+            else {
+               state.emplace_back();
+               const bool result = Control< Rule >::template match< A, M, Action, Control2 >( in, st... );
+               if( result ) {
+                  auto n = std::move( state.back() );
+                  state.pop_back();
+                  for( auto& c : n->children ) {
+                     state.back()->children.emplace_back( std::move( c ) );
+                  }
+               }
+               else {
+                  state.pop_back();
+               }
+               return result;
+            }
          }
       };
 
@@ -446,37 +471,6 @@ namespace TAO_PEGTL_NAMESPACE::parse_tree
             state.back()->template failure< Rule >( in, st... );
             state.pop_back();
          }
-
-         template< apply_mode A,
-                   rewind_mode M,
-                   template< typename... >
-                   class Action,
-                   template< typename... >
-                   class Control2,
-                   typename Input,
-                   typename... States >
-         [[nodiscard]] static bool match( Input& in, States&&... st )
-         {
-            if constexpr( is_seq< Rule >::value ) {
-               auto& state = std::get< sizeof...( st ) - 1 >( std::tie( st... ) );
-               state.emplace_back();
-               const bool result = Control< Rule >::template match< A, M, Action, Control2 >( in, st... );
-               if( result ) {
-                  auto n = std::move( state.back() );
-                  state.pop_back();
-                  for( auto& c : n->children ) {
-                     state.back()->children.emplace_back( std::move( c ) );
-                  }
-               }
-               else {
-                  state.pop_back();
-               }
-               return result;
-            }
-            else {
-               return Control< Rule >::template match< A, M, Action, Control2 >( in, st... );
-            }
-         }
       };
 
       template< typename >
diff --git a/packages/PEGTL/include/tao/pegtl/contrib/raw_string.hpp b/packages/PEGTL/include/tao/pegtl/contrib/raw_string.hpp
index 92a62fee53ac23c09e89da123a596c5252137d3e..7c3c8eefb179b038468a6d1b50791ee5868805cf 100644
--- a/packages/PEGTL/include/tao/pegtl/contrib/raw_string.hpp
+++ b/packages/PEGTL/include/tao/pegtl/contrib/raw_string.hpp
@@ -196,8 +196,7 @@ namespace TAO_PEGTL_NAMESPACE
       // when a raw string is not closed properly or has invalid content.
       struct content
          : internal::raw_string_until< internal::at_raw_string_close< Marker, Close >, Contents... >
-      {
-      };
+      {};
 
       using analyze_t = typename internal::seq< internal::bytes< 1 >, content, internal::bytes< 1 > >::analyze_t;
 
diff --git a/packages/PEGTL/include/tao/pegtl/contrib/rep_one_min_max.hpp b/packages/PEGTL/include/tao/pegtl/contrib/rep_one_min_max.hpp
index ee8c7515ba556e240681fd06e09a60b3a08500ae..f190edaabca38bc5bb7cff3d5eca856595996b1d 100644
--- a/packages/PEGTL/include/tao/pegtl/contrib/rep_one_min_max.hpp
+++ b/packages/PEGTL/include/tao/pegtl/contrib/rep_one_min_max.hpp
@@ -51,9 +51,9 @@ namespace TAO_PEGTL_NAMESPACE
    inline namespace ascii
    {
       template< unsigned Min, unsigned Max, char C >
-      struct rep_one_min_max : internal::rep_one_min_max< Min, Max, C >
-      {
-      };
+      struct rep_one_min_max
+         : internal::rep_one_min_max< Min, Max, C >
+      {};
 
    }  // namespace ascii
 
diff --git a/packages/PEGTL/include/tao/pegtl/contrib/rep_string.hpp b/packages/PEGTL/include/tao/pegtl/contrib/rep_string.hpp
index fd1607cd2a65c29ae8c01154b1452098e8337277..39796eef9816cc84c0594ad6d129b6001c3fa6f4 100644
--- a/packages/PEGTL/include/tao/pegtl/contrib/rep_string.hpp
+++ b/packages/PEGTL/include/tao/pegtl/contrib/rep_string.hpp
@@ -25,8 +25,7 @@ namespace TAO_PEGTL_NAMESPACE
       template< std::size_t N, char... Ss, char... Cs >
       struct make_rep_string< N, string< Ss... >, Cs... >
          : make_rep_string< N - 1, string< Ss..., Cs... >, Cs... >
-      {
-      };
+      {};
 
    }  // namespace internal
 
diff --git a/packages/PEGTL/include/tao/pegtl/cstream_input.hpp b/packages/PEGTL/include/tao/pegtl/cstream_input.hpp
index 54e62feefb162301719bdb6fdca2a2e56f467bbb..cebc6f7aa6201b877991cd73bb0b5804092848b8 100644
--- a/packages/PEGTL/include/tao/pegtl/cstream_input.hpp
+++ b/packages/PEGTL/include/tao/pegtl/cstream_input.hpp
@@ -21,8 +21,7 @@ namespace TAO_PEGTL_NAMESPACE
       template< typename T >
       cstream_input( std::FILE* in_stream, const std::size_t in_maximum, T&& in_source )
          : buffer_input< internal::cstream_reader, Eol, std::string, Chunk >( std::forward< T >( in_source ), in_maximum, in_stream )
-      {
-      }
+      {}
    };
 
    template< typename... Ts >
diff --git a/packages/PEGTL/include/tao/pegtl/internal/action_input.hpp b/packages/PEGTL/include/tao/pegtl/internal/action_input.hpp
index 91b69de80f77c2c504b9d3f8479386d1306722c8..051b1753be03654730f0a41685dd18a02563237c 100644
--- a/packages/PEGTL/include/tao/pegtl/internal/action_input.hpp
+++ b/packages/PEGTL/include/tao/pegtl/internal/action_input.hpp
@@ -26,8 +26,7 @@ namespace TAO_PEGTL_NAMESPACE::internal
       action_input( const iterator_t& in_begin, const Input& in_input ) noexcept
          : m_begin( in_begin ),
            m_input( in_input )
-      {
-      }
+      {}
 
       action_input( const action_input& ) = delete;
       action_input( action_input&& ) = delete;
diff --git a/packages/PEGTL/include/tao/pegtl/internal/always_false.hpp b/packages/PEGTL/include/tao/pegtl/internal/always_false.hpp
index 23d72dfa0edfb4f097a0bae71097156dca421650..cfeb7d1c9f0e2cace5ebfd0e93161dcba3f14725 100644
--- a/packages/PEGTL/include/tao/pegtl/internal/always_false.hpp
+++ b/packages/PEGTL/include/tao/pegtl/internal/always_false.hpp
@@ -13,8 +13,7 @@ namespace TAO_PEGTL_NAMESPACE::internal
    template< typename... >
    struct always_false
       : std::false_type
-   {
-   };
+   {};
 
 }  // namespace TAO_PEGTL_NAMESPACE::internal
 
diff --git a/packages/PEGTL/include/tao/pegtl/internal/cstream_reader.hpp b/packages/PEGTL/include/tao/pegtl/internal/cstream_reader.hpp
index f22fb08fa0d28a4b293f4ffd898876a33f4095a6..5d46854c6debb092ed18a039958d9dbc0732d67c 100644
--- a/packages/PEGTL/include/tao/pegtl/internal/cstream_reader.hpp
+++ b/packages/PEGTL/include/tao/pegtl/internal/cstream_reader.hpp
@@ -22,7 +22,7 @@ namespace TAO_PEGTL_NAMESPACE::internal
          assert( m_cstream != nullptr );
       }
 
-      [[nodiscard]] std::size_t operator()( char* buffer, const std::size_t length )
+      [[nodiscard]] std::size_t operator()( char* buffer, const std::size_t length ) const
       {
          if( const auto r = std::fread( buffer, 1, length, m_cstream ) ) {
             return r;
diff --git a/packages/PEGTL/include/tao/pegtl/internal/file_mapper_posix.hpp b/packages/PEGTL/include/tao/pegtl/internal/file_mapper_posix.hpp
index bf77dccaff8972107efe9a9fd6ab3ca6c51fb2fc..cd4b5663e1c14c479835f1d2f7bfa88d48844bb5 100644
--- a/packages/PEGTL/include/tao/pegtl/internal/file_mapper_posix.hpp
+++ b/packages/PEGTL/include/tao/pegtl/internal/file_mapper_posix.hpp
@@ -20,8 +20,7 @@ namespace TAO_PEGTL_NAMESPACE::internal
    public:
       explicit file_mapper( const char* filename )
          : file_mapper( file_opener( filename ) )
-      {
-      }
+      {}
 
       explicit file_mapper( const file_opener& reader )
          : m_size( reader.size() ),
diff --git a/packages/PEGTL/include/tao/pegtl/internal/file_mapper_win32.hpp b/packages/PEGTL/include/tao/pegtl/internal/file_mapper_win32.hpp
index 80686ae3f19deff4251378cc29426c788129cfed..27f9eaf955f141de0c02478d93d02a518af1bade 100644
--- a/packages/PEGTL/include/tao/pegtl/internal/file_mapper_win32.hpp
+++ b/packages/PEGTL/include/tao/pegtl/internal/file_mapper_win32.hpp
@@ -37,8 +37,7 @@ namespace TAO_PEGTL_NAMESPACE::internal
       explicit win32_file_opener( const char* filename )
          : m_source( filename ),
            m_handle( open() )
-      {
-      }
+      {}
 
       win32_file_opener( const win32_file_opener& ) = delete;
       win32_file_opener( win32_file_opener&& ) = delete;
@@ -102,14 +101,12 @@ namespace TAO_PEGTL_NAMESPACE::internal
    {
       explicit win32_file_mapper( const char* filename )
          : win32_file_mapper( win32_file_opener( filename ) )
-      {
-      }
+      {}
 
       explicit win32_file_mapper( const win32_file_opener& reader )
          : m_size( reader.size() ),
            m_handle( open( reader ) )
-      {
-      }
+      {}
 
       win32_file_mapper( const win32_file_mapper& ) = delete;
       win32_file_mapper( win32_file_mapper&& ) = delete;
@@ -153,8 +150,7 @@ namespace TAO_PEGTL_NAMESPACE::internal
    public:
       explicit file_mapper( const char* filename )
          : file_mapper( win32_file_mapper( filename ) )
-      {
-      }
+      {}
 
       explicit file_mapper( const win32_file_mapper& mapper )
          : m_size( mapper.m_size ),
diff --git a/packages/PEGTL/include/tao/pegtl/internal/file_opener.hpp b/packages/PEGTL/include/tao/pegtl/internal/file_opener.hpp
index 801e735aa0999b6c83e4667fd136815c255d8e79..5f2521b6b1e3eafc4a7b294e8ce65f0dc2426c21 100644
--- a/packages/PEGTL/include/tao/pegtl/internal/file_opener.hpp
+++ b/packages/PEGTL/include/tao/pegtl/internal/file_opener.hpp
@@ -21,8 +21,7 @@ namespace TAO_PEGTL_NAMESPACE::internal
       explicit file_opener( const char* filename )
          : m_source( filename ),
            m_fd( open() )
-      {
-      }
+      {}
 
       file_opener( const file_opener& ) = delete;
       file_opener( file_opener&& ) = delete;
diff --git a/packages/PEGTL/include/tao/pegtl/internal/file_reader.hpp b/packages/PEGTL/include/tao/pegtl/internal/file_reader.hpp
index 8c69d4decaa77ebdda05a57ccbc2384f7fb20f31..ac098e5921edae0d14f0ed7efe7e298670b95c9a 100644
--- a/packages/PEGTL/include/tao/pegtl/internal/file_reader.hpp
+++ b/packages/PEGTL/include/tao/pegtl/internal/file_reader.hpp
@@ -46,14 +46,12 @@ namespace TAO_PEGTL_NAMESPACE::internal
       explicit file_reader( const char* filename )
          : m_source( filename ),
            m_file( file_open( m_source ) )
-      {
-      }
+      {}
 
       file_reader( FILE* file, const char* filename ) noexcept
          : m_source( filename ),
            m_file( file )
-      {
-      }
+      {}
 
       file_reader( const file_reader& ) = delete;
       file_reader( file_reader&& ) = delete;
diff --git a/packages/PEGTL/include/tao/pegtl/internal/istream_reader.hpp b/packages/PEGTL/include/tao/pegtl/internal/istream_reader.hpp
index 6d6016464fa5d7282d86c9dfadd4772a61d6d388..fa91b960daf466358a3d7a9a061da09cc3bc4ed3 100644
--- a/packages/PEGTL/include/tao/pegtl/internal/istream_reader.hpp
+++ b/packages/PEGTL/include/tao/pegtl/internal/istream_reader.hpp
@@ -15,8 +15,7 @@ namespace TAO_PEGTL_NAMESPACE::internal
    {
       explicit istream_reader( std::istream& s ) noexcept
          : m_istream( s )
-      {
-      }
+      {}
 
       [[nodiscard]] std::size_t operator()( char* buffer, const std::size_t length )
       {
diff --git a/packages/PEGTL/include/tao/pegtl/internal/istring.hpp b/packages/PEGTL/include/tao/pegtl/internal/istring.hpp
index e615fb1680b79611d90b1414f5e6cae6fd7dae42..bc0f765885ba2fe3ad079a8673c12c5cde7625fc 100644
--- a/packages/PEGTL/include/tao/pegtl/internal/istring.hpp
+++ b/packages/PEGTL/include/tao/pegtl/internal/istring.hpp
@@ -43,8 +43,7 @@ namespace TAO_PEGTL_NAMESPACE::internal
    template<>
    struct istring<>
       : trivial< true >
-   {
-   };
+   {};
 
    template< char... Cs >
    struct istring
diff --git a/packages/PEGTL/include/tao/pegtl/internal/iterator.hpp b/packages/PEGTL/include/tao/pegtl/internal/iterator.hpp
index c598f2146980948b3e96e35112d37ab768e7ee9f..416b53d006beb875cf725d25649ceaf8014f26b1 100644
--- a/packages/PEGTL/include/tao/pegtl/internal/iterator.hpp
+++ b/packages/PEGTL/include/tao/pegtl/internal/iterator.hpp
@@ -16,16 +16,14 @@ namespace TAO_PEGTL_NAMESPACE::internal
 
       explicit iterator( const char* in_data ) noexcept
          : data( in_data )
-      {
-      }
+      {}
 
       iterator( const char* in_data, const std::size_t in_byte, const std::size_t in_line, const std::size_t in_byte_in_line ) noexcept
          : data( in_data ),
            byte( in_byte ),
            line( in_line ),
            byte_in_line( in_byte_in_line )
-      {
-      }
+      {}
 
       iterator( const iterator& ) = default;
       iterator( iterator&& ) = default;
diff --git a/packages/PEGTL/include/tao/pegtl/internal/marker.hpp b/packages/PEGTL/include/tao/pegtl/internal/marker.hpp
index bbecc7b33f31ab0ecea76e190e6b8cd5b1ff852f..27d4c0cf08e42cccac3502b93685251ce2556fa1 100644
--- a/packages/PEGTL/include/tao/pegtl/internal/marker.hpp
+++ b/packages/PEGTL/include/tao/pegtl/internal/marker.hpp
@@ -16,8 +16,7 @@ namespace TAO_PEGTL_NAMESPACE::internal
       static constexpr rewind_mode next_rewind_mode = M;
 
       explicit marker( const Iterator& /*unused*/ ) noexcept
-      {
-      }
+      {}
 
       marker( const marker& ) = delete;
       marker( marker&& ) = delete;
@@ -42,8 +41,7 @@ namespace TAO_PEGTL_NAMESPACE::internal
       explicit marker( Iterator& i ) noexcept
          : m_saved( i ),
            m_input( &i )
-      {
-      }
+      {}
 
       marker( const marker& ) = delete;
       marker( marker&& ) = delete;
diff --git a/packages/PEGTL/include/tao/pegtl/internal/ranges.hpp b/packages/PEGTL/include/tao/pegtl/internal/ranges.hpp
index 84527442315007973432a860c7489151a0ac2282..8aa01e70c18fb8bfab7c438ad494d1d30bab6f0e 100644
--- a/packages/PEGTL/include/tao/pegtl/internal/ranges.hpp
+++ b/packages/PEGTL/include/tao/pegtl/internal/ranges.hpp
@@ -82,8 +82,7 @@ namespace TAO_PEGTL_NAMESPACE::internal
    template< typename Peek, typename Peek::data_t Lo, typename Peek::data_t Hi >
    struct ranges< Peek, Lo, Hi >
       : range< result_on_found::success, Peek, Lo, Hi >
-   {
-   };
+   {};
 
    template< typename Peek, typename Peek::data_t... Cs >
    inline constexpr bool skip_control< ranges< Peek, Cs... > > = true;
diff --git a/packages/PEGTL/include/tao/pegtl/internal/require.hpp b/packages/PEGTL/include/tao/pegtl/internal/require.hpp
index 7ed38f59b51673db4fead1d019e9b799f4027193..94e299a231f533c22e6ca140ed8e0174baab97c4 100644
--- a/packages/PEGTL/include/tao/pegtl/internal/require.hpp
+++ b/packages/PEGTL/include/tao/pegtl/internal/require.hpp
@@ -19,8 +19,7 @@ namespace TAO_PEGTL_NAMESPACE::internal
    template<>
    struct require< 0 >
       : trivial< true >
-   {
-   };
+   {};
 
    template< unsigned Amount >
    struct require
diff --git a/packages/PEGTL/include/tao/pegtl/internal/seq.hpp b/packages/PEGTL/include/tao/pegtl/internal/seq.hpp
index 65ee88afd878db685b2ffa8808c213b0e32920e1..3779635b2d87955c611ae169464ec3fa5bcf3294 100644
--- a/packages/PEGTL/include/tao/pegtl/internal/seq.hpp
+++ b/packages/PEGTL/include/tao/pegtl/internal/seq.hpp
@@ -22,8 +22,7 @@ namespace TAO_PEGTL_NAMESPACE::internal
    template<>
    struct seq<>
       : trivial< true >
-   {
-   };
+   {};
 
    template< typename Rule >
    struct seq< Rule >
diff --git a/packages/PEGTL/include/tao/pegtl/internal/sor.hpp b/packages/PEGTL/include/tao/pegtl/internal/sor.hpp
index 8100d5dce87ae81efda53c389eead7a4b9dc4c04..a26d466b64c923ea4d42b8a25de16e26a3955e67 100644
--- a/packages/PEGTL/include/tao/pegtl/internal/sor.hpp
+++ b/packages/PEGTL/include/tao/pegtl/internal/sor.hpp
@@ -24,14 +24,12 @@ namespace TAO_PEGTL_NAMESPACE::internal
    template<>
    struct sor<>
       : trivial< false >
-   {
-   };
+   {};
 
    template< typename... Rules >
    struct sor
       : sor< std::index_sequence_for< Rules... >, Rules... >
-   {
-   };
+   {};
 
    template< std::size_t... Indices, typename... Rules >
    struct sor< std::index_sequence< Indices... >, Rules... >
diff --git a/packages/PEGTL/include/tao/pegtl/internal/string.hpp b/packages/PEGTL/include/tao/pegtl/internal/string.hpp
index 142d33a1451e3ee416040162ae39384f16734b6a..b8ed2eedb594e4aa93ae56db9f703bee80fd2f3f 100644
--- a/packages/PEGTL/include/tao/pegtl/internal/string.hpp
+++ b/packages/PEGTL/include/tao/pegtl/internal/string.hpp
@@ -29,8 +29,7 @@ namespace TAO_PEGTL_NAMESPACE::internal
    template<>
    struct string<>
       : trivial< true >
-   {
-   };
+   {};
 
    template< char... Cs >
    struct string
diff --git a/packages/PEGTL/include/tao/pegtl/istream_input.hpp b/packages/PEGTL/include/tao/pegtl/istream_input.hpp
index 44e89f1addb9393cbdfbcde7203127e5192ccbde..d9a967ef91f71a5c9e26b61de282db57bb129b31 100644
--- a/packages/PEGTL/include/tao/pegtl/istream_input.hpp
+++ b/packages/PEGTL/include/tao/pegtl/istream_input.hpp
@@ -21,8 +21,7 @@ namespace TAO_PEGTL_NAMESPACE
       template< typename T >
       istream_input( std::istream& in_stream, const std::size_t in_maximum, T&& in_source )
          : buffer_input< internal::istream_reader, Eol, std::string, Chunk >( std::forward< T >( in_source ), in_maximum, in_stream )
-      {
-      }
+      {}
    };
 
    template< typename... Ts >
diff --git a/packages/PEGTL/include/tao/pegtl/memory_input.hpp b/packages/PEGTL/include/tao/pegtl/memory_input.hpp
index 5f074c3cb6de5e81ee53ba1529bbad6e1dabeb23..6c4c8c9a5f21944bbe74b36361126b413d8d93ba 100644
--- a/packages/PEGTL/include/tao/pegtl/memory_input.hpp
+++ b/packages/PEGTL/include/tao/pegtl/memory_input.hpp
@@ -46,8 +46,7 @@ namespace TAO_PEGTL_NAMESPACE
               m_current( in_begin ),
               m_end( in_end ),
               m_source( std::forward< T >( in_source ) )
-         {
-         }
+         {}
 
          template< typename T >
          memory_input_base( const char* in_begin, const char* in_end, T&& in_source ) noexcept( std::is_nothrow_constructible_v< Source, T&& > )
@@ -55,8 +54,7 @@ namespace TAO_PEGTL_NAMESPACE
               m_current( in_begin ),
               m_end( in_end ),
               m_source( std::forward< T >( in_source ) )
-         {
-         }
+         {}
 
          memory_input_base( const memory_input_base& ) = delete;
          memory_input_base( memory_input_base&& ) = delete;
@@ -124,15 +122,6 @@ namespace TAO_PEGTL_NAMESPACE
             m_current.byte_in_line = in_byte_in_line;
          }
 
-         template< rewind_mode M >
-         void restart( const internal::marker< iterator_t, M >& m )
-         {
-            m_current.data = m.iterator().data;
-            m_current.byte = m.iterator().byte;
-            m_current.line = m.iterator().line;
-            m_current.byte_in_line = m.iterator().byte_in_line;
-         }
-
       protected:
          const char* const m_begin;
          iterator_t m_current;
@@ -152,8 +141,7 @@ namespace TAO_PEGTL_NAMESPACE
               m_current( in_begin.data ),
               m_end( in_end ),
               m_source( std::forward< T >( in_source ) )
-         {
-         }
+         {}
 
          template< typename T >
          memory_input_base( const char* in_begin, const char* in_end, T&& in_source ) noexcept( std::is_nothrow_constructible_v< Source, T&& > )
@@ -161,8 +149,7 @@ namespace TAO_PEGTL_NAMESPACE
               m_current( in_begin ),
               m_end( in_end ),
               m_source( std::forward< T >( in_source ) )
-         {
-         }
+         {}
 
          memory_input_base( const memory_input_base& ) = delete;
          memory_input_base( memory_input_base&& ) = delete;
@@ -219,12 +206,6 @@ namespace TAO_PEGTL_NAMESPACE
             m_current = m_begin.data;
          }
 
-         template< rewind_mode M >
-         void restart( const internal::marker< iterator_t, M >& m )
-         {
-            m_current = m.iterator();
-         }
-
       protected:
          const internal::iterator m_begin;
          iterator_t m_current;
@@ -253,20 +234,17 @@ namespace TAO_PEGTL_NAMESPACE
       template< typename T >
       memory_input( const char* in_begin, const std::size_t in_size, T&& in_source ) noexcept( std::is_nothrow_constructible_v< Source, T&& > )
          : memory_input( in_begin, in_begin + in_size, std::forward< T >( in_source ) )
-      {
-      }
+      {}
 
       template< typename T >
       memory_input( const std::string& in_string, T&& in_source ) noexcept( std::is_nothrow_constructible_v< Source, T&& > )
          : memory_input( in_string.data(), in_string.size(), std::forward< T >( in_source ) )
-      {
-      }
+      {}
 
       template< typename T >
       memory_input( const std::string_view in_string, T&& in_source ) noexcept( std::is_nothrow_constructible_v< Source, T&& > )
          : memory_input( in_string.data(), in_string.size(), std::forward< T >( in_source ) )
-      {
-      }
+      {}
 
       template< typename T >
       memory_input( std::string&&, T&& ) = delete;
@@ -274,14 +252,12 @@ namespace TAO_PEGTL_NAMESPACE
       template< typename T >
       memory_input( const char* in_begin, T&& in_source ) noexcept( std::is_nothrow_constructible_v< Source, T&& > )
          : memory_input( in_begin, std::strlen( in_begin ), std::forward< T >( in_source ) )
-      {
-      }
+      {}
 
       template< typename T >
       memory_input( const char* in_begin, const char* in_end, T&& in_source, const std::size_t in_byte, const std::size_t in_line, const std::size_t in_byte_in_line ) noexcept( std::is_nothrow_constructible_v< Source, T&& > )
          : memory_input( { in_begin, in_byte, in_line, in_byte_in_line }, in_end, std::forward< T >( in_source ) )
-      {
-      }
+      {}
 
       memory_input( const memory_input& ) = delete;
       memory_input( memory_input&& ) = delete;
@@ -326,6 +302,14 @@ namespace TAO_PEGTL_NAMESPACE
          return this->m_current;
       }
 
+      using internal::memory_input_base< P, Eol, Source >::restart;
+
+      template< rewind_mode M >
+      void restart( const internal::marker< iterator_t, M >& m ) noexcept
+      {
+         iterator() = m.iterator();
+      }
+
       using internal::memory_input_base< P, Eol, Source >::position;
 
       [[nodiscard]] TAO_PEGTL_NAMESPACE::position position() const
@@ -333,13 +317,9 @@ namespace TAO_PEGTL_NAMESPACE
          return position( iterator() );
       }
 
-      void discard() const noexcept
-      {
-      }
+      void discard() const noexcept {}
 
-      void require( const std::size_t /*unused*/ ) const noexcept
-      {
-      }
+      void require( const std::size_t /*unused*/ ) const noexcept {}
 
       template< rewind_mode M >
       [[nodiscard]] internal::marker< iterator_t, M > mark() noexcept
diff --git a/packages/PEGTL/include/tao/pegtl/mmap_input.hpp b/packages/PEGTL/include/tao/pegtl/mmap_input.hpp
index b4fd410317885b53590570f6f5fc276b54720010..82206dee5ce1e351acd426dcf9a1836b2d511266 100644
--- a/packages/PEGTL/include/tao/pegtl/mmap_input.hpp
+++ b/packages/PEGTL/include/tao/pegtl/mmap_input.hpp
@@ -36,8 +36,7 @@ namespace TAO_PEGTL_NAMESPACE
          explicit mmap_holder( T&& in_filename )
             : filename( std::forward< T >( in_filename ) ),
               data( filename.c_str() )
-         {
-         }
+         {}
 
          mmap_holder( const mmap_holder& ) = delete;
          mmap_holder( mmap_holder&& ) = delete;
@@ -59,8 +58,7 @@ namespace TAO_PEGTL_NAMESPACE
       explicit mmap_input( T&& in_filename )
          : internal::mmap_holder( std::forward< T >( in_filename ) ),
            memory_input< P, Eol, const char* >( data.begin(), data.end(), filename.c_str() )
-      {
-      }
+      {}
 
       mmap_input( const mmap_input& ) = delete;
       mmap_input( mmap_input&& ) = delete;
diff --git a/packages/PEGTL/include/tao/pegtl/normal.hpp b/packages/PEGTL/include/tao/pegtl/normal.hpp
index 02e67c12b5225b2d74a3b4c1b4c9901507c25433..a96d0d0d36ad3df447ef6020fdaf655d1e1ef8da 100644
--- a/packages/PEGTL/include/tao/pegtl/normal.hpp
+++ b/packages/PEGTL/include/tao/pegtl/normal.hpp
@@ -20,20 +20,18 @@
 namespace TAO_PEGTL_NAMESPACE
 {
    template< typename Rule >
-   constexpr const char* error_message = nullptr;
+   inline constexpr const char* error_message = nullptr;
 
    template< typename Rule >
    struct normal
    {
       template< typename Input, typename... States >
       static void start( const Input& /*unused*/, States&&... /*unused*/ ) noexcept
-      {
-      }
+      {}
 
       template< typename Input, typename... States >
       static void success( const Input& /*unused*/, States&&... /*unused*/ ) noexcept
-      {
-      }
+      {}
 
       template< typename Input, typename... States >
       static void failure( const Input& in, States&&... /*unused*/ ) noexcept( error_message< Rule > == nullptr )
@@ -84,12 +82,11 @@ namespace TAO_PEGTL_NAMESPACE
                 typename... States >
       [[nodiscard]] static bool match( Input& in, States&&... st )
       {
-         constexpr rewind_mode m = ( error_message< Rule > == nullptr ) ? M : rewind_mode::dontcare;
-         if constexpr( internal::has_match_v< Rule, A, m, Action, Control, Input, States... > ) {
-            return Action< Rule >::template match< Rule, A, m, Action, Control >( in, st... );
+         if constexpr( internal::has_match_v< Rule, A, M, Action, Control, Input, States... > ) {
+            return Action< Rule >::template match< Rule, A, M, Action, Control >( in, st... );
          }
          else {
-            return TAO_PEGTL_NAMESPACE::match< Rule, A, m, Action, Control >( in, st... );
+            return TAO_PEGTL_NAMESPACE::match< Rule, A, M, Action, Control >( in, st... );
          }
       }
    };
diff --git a/packages/PEGTL/include/tao/pegtl/nothing.hpp b/packages/PEGTL/include/tao/pegtl/nothing.hpp
index d3cbc1e8787a6b97c0dfbdb45a963b8bd160ea07..6c4b759ce9f5fad6d80c5488707f9cdd2158a8e0 100644
--- a/packages/PEGTL/include/tao/pegtl/nothing.hpp
+++ b/packages/PEGTL/include/tao/pegtl/nothing.hpp
@@ -10,8 +10,7 @@ namespace TAO_PEGTL_NAMESPACE
 {
    template< typename Rule >
    struct nothing
-   {
-   };
+   {};
 
    using maybe_nothing = nothing< void >;
 
diff --git a/packages/PEGTL/include/tao/pegtl/parse_error.hpp b/packages/PEGTL/include/tao/pegtl/parse_error.hpp
index 89e70b58609d96b26b447813dac450a874ee3ef1..277d4cc2de7189b17f2b8782375665d9906a9b00 100644
--- a/packages/PEGTL/include/tao/pegtl/parse_error.hpp
+++ b/packages/PEGTL/include/tao/pegtl/parse_error.hpp
@@ -23,15 +23,13 @@ namespace TAO_PEGTL_NAMESPACE
       parse_error( Msg&& msg, std::vector< position > in_positions )
          : std::runtime_error( std::forward< Msg >( msg ) ),
            positions( std::move( in_positions ) )
-      {
-      }
+      {}
 
       template< typename Msg >
       parse_error( Msg&& msg, const position& pos )
          : std::runtime_error( std::forward< Msg >( msg ) ),
            positions( 1, pos )
-      {
-      }
+      {}
 
       template< typename Msg >
       parse_error( Msg&& msg, position&& pos )
@@ -43,8 +41,7 @@ namespace TAO_PEGTL_NAMESPACE
       template< typename Msg, typename Input >
       parse_error( Msg&& msg, const Input& in )
          : parse_error( std::forward< Msg >( msg ), in.position() )
-      {
-      }
+      {}
 
       std::vector< position > positions;
    };
diff --git a/packages/PEGTL/include/tao/pegtl/position.hpp b/packages/PEGTL/include/tao/pegtl/position.hpp
index 0b5af256578cc223b49f182d9b57e35928034133..6cdc07bd02077901d81769ab60ff3f573b187190 100644
--- a/packages/PEGTL/include/tao/pegtl/position.hpp
+++ b/packages/PEGTL/include/tao/pegtl/position.hpp
@@ -25,8 +25,7 @@ namespace TAO_PEGTL_NAMESPACE
            line( p.line ),
            byte_in_line( p.byte_in_line ),
            source( std::move( p.source ) )
-      {
-      }
+      {}
 
       position( const position& ) = default;
 
@@ -47,8 +46,7 @@ namespace TAO_PEGTL_NAMESPACE
            line( in_iter.line ),
            byte_in_line( in_iter.byte_in_line ),
            source( std::forward< T >( in_source ) )
-      {
-      }
+      {}
 
       ~position() = default;
 
diff --git a/packages/PEGTL/include/tao/pegtl/read_input.hpp b/packages/PEGTL/include/tao/pegtl/read_input.hpp
index ba2031060f36bc7149dd098c4d3717f383da7e65..224b2e9a75874cbac59aff00dbe95b950b29d241 100644
--- a/packages/PEGTL/include/tao/pegtl/read_input.hpp
+++ b/packages/PEGTL/include/tao/pegtl/read_input.hpp
@@ -24,8 +24,7 @@ namespace TAO_PEGTL_NAMESPACE
          template< typename T >
          explicit filename_holder( T&& in_filename )
             : filename( std::forward< T >( in_filename ) )
-         {
-         }
+         {}
 
          filename_holder( const filename_holder& ) = delete;
          filename_holder( filename_holder&& ) = delete;
@@ -47,15 +46,13 @@ namespace TAO_PEGTL_NAMESPACE
       explicit read_input( T&& in_filename )
          : internal::filename_holder( std::forward< T >( in_filename ) ),
            string_input< P, Eol, const char* >( internal::file_reader( filename.c_str() ).read(), filename.c_str() )
-      {
-      }
+      {}
 
       template< typename T >
       read_input( FILE* in_file, T&& in_filename )
          : internal::filename_holder( std::forward< T >( in_filename ) ),
            string_input< P, Eol, const char* >( internal::file_reader( in_file, filename.c_str() ).read(), filename.c_str() )
-      {
-      }
+      {}
 
       read_input( const read_input& ) = delete;
       read_input( read_input&& ) = delete;
diff --git a/packages/PEGTL/include/tao/pegtl/rules.hpp b/packages/PEGTL/include/tao/pegtl/rules.hpp
index cd7867061fbec2d6e09f7ca2dcf0660aefb9d7fb..d1ced0a7972b292ab14cd49f74e76dab7f5d167f 100644
--- a/packages/PEGTL/include/tao/pegtl/rules.hpp
+++ b/packages/PEGTL/include/tao/pegtl/rules.hpp
@@ -57,8 +57,8 @@ namespace TAO_PEGTL_NAMESPACE
    template< typename Cond, typename... Rules > struct star_must : internal::star_must< Cond, Rules... > {};
    template< typename State, typename... Rules > struct state : internal::state< State, Rules... > {};
    struct success : internal::trivial< true > {};
-   template< typename... Rules > struct try_catch : internal::try_catch_type< parse_error, Rules... > {};
-   template< typename Exception, typename... Rules > struct try_catch_type : internal::try_catch_type< Exception, Rules... > {};
+   template< typename... Rules > struct try_catch : internal::seq< internal::try_catch_type< parse_error, Rules... > > {};
+   template< typename Exception, typename... Rules > struct try_catch_type : internal::seq< internal::try_catch_type< Exception, Rules... > > {};
    template< typename Cond, typename... Rules > struct until : internal::until< Cond, Rules... > {};
    // clang-format on
 
diff --git a/packages/PEGTL/include/tao/pegtl/string_input.hpp b/packages/PEGTL/include/tao/pegtl/string_input.hpp
index 1830585732bba3183f6c40d4a650c69642e5cf2d..06fec70d670f3554e5f3f167d33416048b81ef41 100644
--- a/packages/PEGTL/include/tao/pegtl/string_input.hpp
+++ b/packages/PEGTL/include/tao/pegtl/string_input.hpp
@@ -23,8 +23,7 @@ namespace TAO_PEGTL_NAMESPACE
          template< typename T >
          explicit string_holder( T&& in_data )
             : data( std::forward< T >( in_data ) )
-         {
-         }
+         {}
 
          string_holder( const string_holder& ) = delete;
          string_holder( string_holder&& ) = delete;
@@ -46,8 +45,7 @@ namespace TAO_PEGTL_NAMESPACE
       explicit string_input( V&& in_data, T&& in_source, Ts&&... ts )
          : internal::string_holder( std::forward< V >( in_data ) ),
            memory_input< P, Eol, Source >( data.data(), data.size(), std::forward< T >( in_source ), std::forward< Ts >( ts )... )
-      {
-      }
+      {}
 
       string_input( const string_input& ) = delete;
       string_input( string_input&& ) = delete;
diff --git a/packages/PEGTL/src/example/pegtl/abnf2pegtl.cpp b/packages/PEGTL/src/example/pegtl/abnf2pegtl.cpp
index 952399a8a841fadf0b7702580c1d8dd2d2cff5cb..93d425ce35dd6e6ba206d0a050dff4ab9f076d34 100644
--- a/packages/PEGTL/src/example/pegtl/abnf2pegtl.cpp
+++ b/packages/PEGTL/src/example/pegtl/abnf2pegtl.cpp
@@ -52,7 +52,7 @@ namespace TAO_PEGTL_NAMESPACE
             "case",
             "catch",
             "char",
-            "char_8t",
+            "char8_t",
             "char16_t",
             "char32_t",
             "class",
@@ -649,7 +649,7 @@ namespace TAO_PEGTL_NAMESPACE
                // note: content can not be used here!
                return to_string( n->children.back() );
             }
-            const auto min_element = ( min_val == 1 ) ? content : ( prefix + "rep< " + min + ", " + content + " >" );
+            auto min_element = ( min_val == 1 ) ? content : ( prefix + "rep< " + min + ", " + content + " >" );
             if( min_val == max_val ) {
                return min_element;
             }
diff --git a/packages/PEGTL/src/example/pegtl/analyze.cpp b/packages/PEGTL/src/example/pegtl/analyze.cpp
index a957cde14c6c11f021c3cf85ced8358af0b02c9f..0e4e6416aac5eb3d43a127aa5328813dea9ca74b 100644
--- a/packages/PEGTL/src/example/pegtl/analyze.cpp
+++ b/packages/PEGTL/src/example/pegtl/analyze.cpp
@@ -10,13 +10,11 @@ struct bar;
 
 struct foo
    : sor< digit, bar >
-{
-};
+{};
 
 struct bar
    : plus< foo >
-{
-};
+{};
 
 int main()  // NOLINT(bugprone-exception-escape)
 {
diff --git a/packages/PEGTL/src/example/pegtl/chomsky_hierarchy.cpp b/packages/PEGTL/src/example/pegtl/chomsky_hierarchy.cpp
index c29d01dcde17f47b1e92fe75cfa0d2bcc9841a77..1099fcb2dc78d2a387af38a71892c4136ec22fb4 100644
--- a/packages/PEGTL/src/example/pegtl/chomsky_hierarchy.cpp
+++ b/packages/PEGTL/src/example/pegtl/chomsky_hierarchy.cpp
@@ -20,8 +20,7 @@ namespace example
 
    struct type_3
       : pegtl::star< pegtl::one< 'a' >, pegtl::plus< pegtl::one< 'b' > > >
-   {
-   };
+   {};
 
    // Type 2 - Context Free Languages
 
@@ -31,8 +30,7 @@ namespace example
 
    struct type_2_recursive
       : pegtl::sor< pegtl::string< 'a', 'b' >, pegtl::seq< pegtl::one< 'a' >, type_2_recursive, pegtl::one< 'b' > > >
-   {
-   };
+   {};
 
    // Implementation that uses state instead of recursion, an
    // action to set the state, and a custom rule to use it.
@@ -65,13 +63,11 @@ namespace example
 
    struct type_2_with_state
       : pegtl::seq< pegtl::star< pegtl::one< 'a' > >, match_n< 'b' > >
-   {
-   };
+   {};
 
    template< typename Rule >
    struct action_2_with_state
-   {
-   };
+   {};
 
    template<>
    struct action_2_with_state< pegtl::star< pegtl::one< 'a' > > >
@@ -93,14 +89,12 @@ namespace example
 
    struct type_1
       : pegtl::seq< pegtl::star< pegtl::one< 'a' > >, match_n< 'b' >, match_n< 'c' > >
-   {
-   };
+   {};
 
    template< typename Rule >
    struct action_1
       : action_2_with_state< Rule >
-   {
-   };
+   {};
 
    // Type 0 - Recursively Enumerable Languages
 
diff --git a/packages/PEGTL/src/example/pegtl/csv1.cpp b/packages/PEGTL/src/example/pegtl/csv1.cpp
index 2565607e910292ed00de0d9cee276bfc2a9eff9c..09aed9205bedf8e9a073538c8f225159237e55ef 100644
--- a/packages/PEGTL/src/example/pegtl/csv1.cpp
+++ b/packages/PEGTL/src/example/pegtl/csv1.cpp
@@ -64,8 +64,7 @@ namespace csv1
    template< typename Rule >
    struct control
       : pegtl::normal< Rule >
-   {
-   };
+   {};
 
    template<>
    struct control< value_line >
diff --git a/packages/PEGTL/src/example/pegtl/json_build.cpp b/packages/PEGTL/src/example/pegtl/json_build.cpp
index 59f5c39a378be58ce25530182d268bc6fd910f7e..f7ea3b9fe6393658698ebd1bf7aa6337ea5695b2 100644
--- a/packages/PEGTL/src/example/pegtl/json_build.cpp
+++ b/packages/PEGTL/src/example/pegtl/json_build.cpp
@@ -32,8 +32,7 @@ namespace examples
 
    template< typename Rule >
    struct action
-   {
-   };
+   {};
 
    template<>
    struct action< pegtl::json::null >
diff --git a/packages/PEGTL/src/example/pegtl/json_classes.hpp b/packages/PEGTL/src/example/pegtl/json_classes.hpp
index 0d1e9f4998b394df62b8142a128ee91591de3591..8513ec804d8aa2d6913778467bc676bbec8a40a8 100644
--- a/packages/PEGTL/src/example/pegtl/json_classes.hpp
+++ b/packages/PEGTL/src/example/pegtl/json_classes.hpp
@@ -27,8 +27,7 @@ namespace examples
    protected:
       explicit json_base( const json_type in_type )
          : type( in_type )
-      {
-      }
+      {}
 
       virtual ~json_base() = default;
 
@@ -60,8 +59,7 @@ namespace examples
    {
       array_json()
          : json_base( json_type::array )
-      {
-      }
+      {}
 
       std::vector< std::shared_ptr< json_base > > data;
 
@@ -85,8 +83,7 @@ namespace examples
       explicit boolean_json( const bool in_data )
          : json_base( json_type::boolean ),
            data( in_data )
-      {
-      }
+      {}
 
       bool data;
 
@@ -101,8 +98,7 @@ namespace examples
    {
       null_json()
          : json_base( json_type::null )
-      {
-      }
+      {}
 
       void stream( std::ostream& o ) const override
       {
@@ -116,8 +112,7 @@ namespace examples
       explicit number_json( const long double in_data )
          : json_base( json_type::number ),
            data( in_data )
-      {
-      }
+      {}
 
       long double data;
 
@@ -181,8 +176,7 @@ namespace examples
       explicit string_json( const std::string& in_data )
          : json_base( json_type::string ),
            data( in_data )
-      {
-      }
+      {}
 
       std::string data;
 
@@ -197,8 +191,7 @@ namespace examples
    {
       object_json()
          : json_base( json_type::object )
-      {
-      }
+      {}
 
       std::map< std::string, std::shared_ptr< json_base > > data;
 
diff --git a/packages/PEGTL/src/example/pegtl/modulus_match.cpp b/packages/PEGTL/src/example/pegtl/modulus_match.cpp
index 13192754104c421f03b181c3b877a410d0decae8..fb484cfd27d28afc335a430638c87d0b20462572 100644
--- a/packages/PEGTL/src/example/pegtl/modulus_match.cpp
+++ b/packages/PEGTL/src/example/pegtl/modulus_match.cpp
@@ -30,8 +30,7 @@ namespace modulus
 
    struct grammar
       : until< eolf, must< my_rule< 3 > > >
-   {
-   };
+   {};
 
 }  // namespace modulus
 
diff --git a/packages/PEGTL/src/test/pegtl/actions_one.cpp b/packages/PEGTL/src/test/pegtl/actions_one.cpp
index b8609822422419f66db090e97617545b0bc3db5b..8f370cea5f1c7db4b48943a2a5bd3fffdf396043 100644
--- a/packages/PEGTL/src/test/pegtl/actions_one.cpp
+++ b/packages/PEGTL/src/test/pegtl/actions_one.cpp
@@ -13,17 +13,17 @@ namespace TAO_PEGTL_NAMESPACE
 
    namespace test1
    {
-      struct fiz : if_must< at< one< 'a' > >, two< 'a' > >
-      {
-      };
+      struct fiz
+         : if_must< at< one< 'a' > >, two< 'a' > >
+      {};
 
-      struct foo : sor< fiz, one< 'b' > >
-      {
-      };
+      struct foo
+         : sor< fiz, one< 'b' > >
+      {};
 
-      struct bar : until< eof, foo >
-      {
-      };
+      struct bar
+         : until< eof, foo >
+      {};
 
       void test_result()
       {
diff --git a/packages/PEGTL/src/test/pegtl/actions_two.cpp b/packages/PEGTL/src/test/pegtl/actions_two.cpp
index 8b29f48c925c92ec0f020140101713dc42c852db..b210c33bce4b42b9f382328b4a21a7a84e248049 100644
--- a/packages/PEGTL/src/test/pegtl/actions_two.cpp
+++ b/packages/PEGTL/src/test/pegtl/actions_two.cpp
@@ -24,10 +24,12 @@ namespace TAO_PEGTL_NAMESPACE
          }
       };
 
-      struct fobble : sor< state< state1, alpha >, digit >
+      struct fobble
+         : sor< state< state1, alpha >, digit >
       {};
 
-      struct fibble : until< eof, fobble >
+      struct fibble
+         : until< eof, fobble >
       {};
 
       template< typename Rule >
diff --git a/packages/PEGTL/src/test/pegtl/contrib_http.cpp b/packages/PEGTL/src/test/pegtl/contrib_http.cpp
index a06175ea4470130b72764ccfe6536f54c2aeb6d3..b4f74cd5adc0e3c5a2cdceccd8351e38a0ca0272 100644
--- a/packages/PEGTL/src/test/pegtl/contrib_http.cpp
+++ b/packages/PEGTL/src/test/pegtl/contrib_http.cpp
@@ -16,8 +16,7 @@ namespace TAO_PEGTL_NAMESPACE
    template< typename Rule >
    struct chunked_action
       : nothing< Rule >
-   {
-   };
+   {};
 
    template<>
    struct chunked_action< http::chunk_ext >
diff --git a/packages/PEGTL/src/test/pegtl/contrib_parse_tree.cpp b/packages/PEGTL/src/test/pegtl/contrib_parse_tree.cpp
index a4122ba6cbc5692f5fa710f345d1e24b9881db86..521a8140cdb8d7eaac1c78d370b38ee9cbbbf8f9 100644
--- a/packages/PEGTL/src/test/pegtl/contrib_parse_tree.cpp
+++ b/packages/PEGTL/src/test/pegtl/contrib_parse_tree.cpp
@@ -18,8 +18,7 @@ namespace TAO_PEGTL_NAMESPACE
    template< typename Rule >
    struct selector
       : parse_tree::selector< Rule, parse_tree::store_content::on< A, B, C, D > >
-   {
-   };
+   {};
 
    void unit_test()
    {
diff --git a/packages/PEGTL/src/test/pegtl/contrib_raw_string.cpp b/packages/PEGTL/src/test/pegtl/contrib_raw_string.cpp
index d0846222ea81ea65ca99c3d860c5c718d91eaade..872251b1a50dcf6374e5e04779a9e0cc1c29e9e6 100644
--- a/packages/PEGTL/src/test/pegtl/contrib_raw_string.cpp
+++ b/packages/PEGTL/src/test/pegtl/contrib_raw_string.cpp
@@ -43,13 +43,11 @@ namespace TAO_PEGTL_NAMESPACE
 
    struct rgrammar
       : must< rstring, eof >
-   {
-   };
+   {};
 
    struct qgrammar
       : must< qstring, eof >
-   {
-   };
+   {};
 
    template< typename Rule, template< typename > class Action, unsigned M, unsigned N >
    void verify_data( const std::size_t line, const char* file, const char ( &m )[ M ], const char ( &n )[ N ] )
diff --git a/packages/PEGTL/src/test/pegtl/data_cstring.cpp b/packages/PEGTL/src/test/pegtl/data_cstring.cpp
index 4f68278240aca458f1fba9ecd8e583469b15aefb..bf8dd4a8036038c438b84831b4b493e039cc0b14 100644
--- a/packages/PEGTL/src/test/pegtl/data_cstring.cpp
+++ b/packages/PEGTL/src/test/pegtl/data_cstring.cpp
@@ -16,9 +16,9 @@ namespace TAO_PEGTL_NAMESPACE
       return parse< Rule, Action, Control >( in );
    }
 
-   struct test_grammar : seq< string< 'a', 'b', 'c', 'd', 'e', 'f' >, not_at< any >, eof >
-   {
-   };
+   struct test_grammar
+      : seq< string< 'a', 'b', 'c', 'd', 'e', 'f' >, not_at< any >, eof >
+   {};
 
    void unit_test()
    {
diff --git a/packages/PEGTL/src/test/pegtl/file_cstream.cpp b/packages/PEGTL/src/test/pegtl/file_cstream.cpp
index 09dee3fa661e57dd240cba50eadae094673de772..85d13f443da76f502c1515f5579c570ca193f4e2 100644
--- a/packages/PEGTL/src/test/pegtl/file_cstream.cpp
+++ b/packages/PEGTL/src/test/pegtl/file_cstream.cpp
@@ -8,13 +8,13 @@
 
 namespace TAO_PEGTL_NAMESPACE
 {
-   struct file_content : seq< TAO_PEGTL_STRING( "dummy content" ), eol, discard >
-   {
-   };
+   struct file_content
+      : seq< TAO_PEGTL_STRING( "dummy content" ), eol, discard >
+   {};
 
-   struct file_grammar : seq< rep_min_max< 11, 11, file_content >, eof >
-   {
-   };
+   struct file_grammar
+      : seq< rep_min_max< 11, 11, file_content >, eof >
+   {};
 
    void unit_test()
    {
diff --git a/packages/PEGTL/src/test/pegtl/file_istream.cpp b/packages/PEGTL/src/test/pegtl/file_istream.cpp
index 17480140a7d14f1ef40b7f614a2bb86a6c22ce69..9b76d071e728dad6521f9b68467aa963492fc8c1 100644
--- a/packages/PEGTL/src/test/pegtl/file_istream.cpp
+++ b/packages/PEGTL/src/test/pegtl/file_istream.cpp
@@ -8,13 +8,13 @@
 
 namespace TAO_PEGTL_NAMESPACE
 {
-   struct file_content : seq< TAO_PEGTL_STRING( "dummy content" ), eol, discard >
-   {
-   };
+   struct file_content
+      : seq< TAO_PEGTL_STRING( "dummy content" ), eol, discard >
+   {};
 
-   struct file_grammar : seq< rep_min_max< 11, 11, file_content >, eof >
-   {
-   };
+   struct file_grammar
+      : seq< rep_min_max< 11, 11, file_content >, eof >
+   {};
 
    void unit_test()
    {
diff --git a/packages/PEGTL/src/test/pegtl/file_read.cpp b/packages/PEGTL/src/test/pegtl/file_read.cpp
index d074e333638cd3056c85044eafff15c149f15b0b..00b0184ee21b5190136da3c3334549a952f87bee 100644
--- a/packages/PEGTL/src/test/pegtl/file_read.cpp
+++ b/packages/PEGTL/src/test/pegtl/file_read.cpp
@@ -12,13 +12,11 @@ namespace TAO_PEGTL_NAMESPACE
    {
       explicit open_input( const char* in_filename )
          : read_input< P, Eol >( internal::file_open( in_filename ), in_filename )
-      {
-      }
+      {}
 
       explicit open_input( const std::string& in_filename )
          : open_input( in_filename.c_str() )
-      {
-      }
+      {}
    };
 
    void unit_test()
diff --git a/packages/PEGTL/src/test/pegtl/pegtl_string_t.cpp b/packages/PEGTL/src/test/pegtl/pegtl_string_t.cpp
index 5b020bcc6e69734b461fdad19060f65659004235..2118e393428a6e29c90e87649a5c8c6822737c37 100644
--- a/packages/PEGTL/src/test/pegtl/pegtl_string_t.cpp
+++ b/packages/PEGTL/src/test/pegtl/pegtl_string_t.cpp
@@ -10,13 +10,13 @@ namespace test
 {
    // We only need to test that this compiles...
 
-   struct foo : TAO_PEGTL_STRING( "foo" )
-   {
-   };
+   struct foo
+      : TAO_PEGTL_STRING( "foo" )
+   {};
 
-   struct foobar : TAO_PEGTL_NAMESPACE::sor< TAO_PEGTL_STRING( "foo" ), TAO_PEGTL_STRING( "bar" ) >
-   {
-   };
+   struct foobar
+      : TAO_PEGTL_NAMESPACE::sor< TAO_PEGTL_STRING( "foo" ), TAO_PEGTL_STRING( "bar" ) >
+   {};
 
    static_assert( std::is_same_v< TAO_PEGTL_STRING( "Hello" ), TAO_PEGTL_NAMESPACE::string< 'H', 'e', 'l', 'l', 'o' > > );
    static_assert( !std::is_same_v< TAO_PEGTL_ISTRING( "Hello" ), TAO_PEGTL_NAMESPACE::string< 'H', 'e', 'l', 'l', 'o' > > );
diff --git a/packages/PEGTL/src/test/pegtl/position.cpp b/packages/PEGTL/src/test/pegtl/position.cpp
index 6a999ec8a976f12e59011bb7e1ef3b9f40576ff0..ff5426d0fa209dde3ae65f958de978afbbe6cc08 100644
--- a/packages/PEGTL/src/test/pegtl/position.cpp
+++ b/packages/PEGTL/src/test/pegtl/position.cpp
@@ -12,8 +12,7 @@ namespace TAO_PEGTL_NAMESPACE
    {
       buffer_input_t( const std::string& in_string, const std::string& in_source )
          : buffer_input< internal::cstring_reader >( in_source, 42, in_string.c_str() )
-      {
-      }
+      {}
    };
 
    template< typename Rule, typename Input = memory_input<> >
diff --git a/packages/PEGTL/src/test/pegtl/rule_state.cpp b/packages/PEGTL/src/test/pegtl/rule_state.cpp
index 52d0de2b162cff181647b39a7d01990dc50ee1f2..456f5481ce2b24cd03d70d4604f1a8322c24e186 100644
--- a/packages/PEGTL/src/test/pegtl/rule_state.cpp
+++ b/packages/PEGTL/src/test/pegtl/rule_state.cpp
@@ -10,13 +10,11 @@ namespace TAO_PEGTL_NAMESPACE
    {
       template< typename Input >
       explicit test_state_state( const Input& /*unused*/ )
-      {
-      }
+      {}
 
       template< typename Input >
       void success( const Input& /*unused*/ ) const
-      {
-      }
+      {}
    };
 
    template< typename... Rules >
diff --git a/packages/PEGTL/src/test/pegtl/verify_file.hpp b/packages/PEGTL/src/test/pegtl/verify_file.hpp
index 15ebe78a1421e4fbb7242f059ea0e874e158a258..9e7df26f783ffd06741ec5bad8b6241bc6cc323d 100644
--- a/packages/PEGTL/src/test/pegtl/verify_file.hpp
+++ b/packages/PEGTL/src/test/pegtl/verify_file.hpp
@@ -10,10 +10,12 @@
 
 namespace TAO_PEGTL_NAMESPACE
 {
-   struct file_content : seq< TAO_PEGTL_STRING( "dummy content" ), eol, discard >
+   struct file_content
+      : seq< TAO_PEGTL_STRING( "dummy content" ), eol, discard >
    {};
 
-   struct file_grammar : seq< rep_min_max< 11, 11, file_content >, eof >
+   struct file_grammar
+      : seq< rep_min_max< 11, 11, file_content >, eof >
    {};
 
    template< typename Rule >
diff --git a/packages/PEGTL/src/test/pegtl/verify_rule.hpp b/packages/PEGTL/src/test/pegtl/verify_rule.hpp
index 2c7b0006c679f1862108a79fe3bb2f5408051b95..3efef51c9b16b06add8e2eb856f223994b00d4f4 100644
--- a/packages/PEGTL/src/test/pegtl/verify_rule.hpp
+++ b/packages/PEGTL/src/test/pegtl/verify_rule.hpp
@@ -21,8 +21,7 @@ namespace TAO_PEGTL_NAMESPACE
    {
       template< typename Input, typename... States >
       static void apply( const Input& /*unused*/, States&&... /*unused*/ )
-      {
-      }
+      {}
    };
 
    template< typename Rule >
@@ -30,8 +29,7 @@ namespace TAO_PEGTL_NAMESPACE
    {
       template< typename... States >
       static void apply0( States&&... /*unused*/ )
-      {
-      }
+      {}
    };
 
    template< typename Rule, typename Eol = eol::lf_crlf >