Library

Catch2 v3.16.1

Versionv3.16.1
Stars★ 21,515
Released2026-10-08

A modern, C++-native, test framework for unit-tests, TDD and BDD - using C++14, C++17 and later (C++11 support is in v2.x branch, and C++03 on the Catch1.x branch)

Release notes

### Fixes
* Fixed optimizations being disabled after including benchmarking headers under MSVC. (#3212)
  * This was introduced in 3.16.0's fix for the deopt implementation for MSVC never being used.
* Fixed Console reporter replacing `\0xFF`s in user-provided strings.
* Added missing `<cassert>` include to `catch_generators_range.hpp`. (#3205)

### Improvements
* Workaround for GCC's quadratic scaling for release builds with number of test cases.
  * In practice the improvement is only noticeable with unity builds and/or template product tests.
* Changed how decomposer operators are defined for better compilation times.
  * For Catch2's `SelfTest` binary, this provides ~2% build time improvement.
* Changed how decomposer handles stringification for smaller binary sizes.
  * For the `SelfTest` binary this is about ~8%.
* Improved compilation costs of multiple assertions in one test cases for release builds.
* Optimized initial test registration at process start:
  * Fewer allocations for test cases with many tags.
  * Faster processing for test cases with <=2 tags.
  * Faster tag validation.
  * Faster checking for duplicated test cases.
* Optimized test selection and filtering:
* Optimized filtering tests by test name.
  * Running `SelfTest` with `abc*` as the filter pattern is ~10% faster.

### Miscellaneous
* `catch_discover_tests` registers individual tests with `--order decl` for faster startup.
  * For `SelfTest`, this provides 20% improvement in Debug and 5% in Release builds.
* `CMakeConfig::` family of tests use the main build's toolchain file. (#3202)
* Deprecated throwing exceptions from the reporter interface functions.
  * Previously, throwing from e.g. `assertionEnded` might, or might not, have worked depending on which assertion has ended. As it is not practical for Catch2 to guard against the reporters failing randomly, and marking so with `noexcept` can provide compilation throughput improvements, I decided to fully forbid it.
  * Reporter constructors are allowed to throw and the test binary will report the error nicely before exiting.
  * Due to C++ limitations, this deprecation cannot be marked inside the code, only in docs.

Share this resource


Discovered 2026-10-09 Source GitHub Archive 2026-10 →