contract_assert statement (since C++26) - cppreference.com (original) (raw)
A contract_assert statement is a contract assertion that may appear in a function or lambda body to verify an internal condition. It ensures the condition holds during execution, triggering a violation (e.g. termination) in debug builds if the condition evaluates to false or the evaluation exits via an exception, and can be ignored in release builds for performance.
[edit] Syntax
| | | | | ---------------------------------------------------------------- | | | | contract_assert attr (optional) ( predicate ) ; | | | | | | |
| attr | - | any number of attributes |
|---|---|---|
| predicate | - | boolean expression that should evaluate to true |
[edit] Keywords
[edit] Notes
| Feature-test macro | Value | Std | Feature |
|---|---|---|---|
| __cpp_contracts | 202502L | (C++26) | Contracts |
[edit] Example
The contract_assert ensures that vector's norm is positive and either normal or subnormal.
template <std::floating_point T> constexpr auto normalize(std::array<T, 3> vector) noexcept pre(/* is_normalizable(vector) /) post(/ vector: is_normalized(vector) */) { auto& [x, y, z]{vector}; const auto norm{std::hypot(x, y, z)}; // debug check for normalization safety contract_assert(std::isfinite(norm) && norm > T(0)); x /= norm, y /= norm, z /= norm; return vector; }
[edit] Support status
| C++26 feature | Paper(s) | GCC | Clang | MSVC | Apple Clang | EDG eccp | Intel C++ | Nvidia HPC C++ (ex PGI)* | Nvidia nvcc | Cray |
|---|---|---|---|---|---|---|---|---|---|---|
| Contracts (FTM)* | P2900R14 |
[edit] References
C++26 standard (ISO/IEC 14882:2026):
8.(7+c ) Assertion statement [stmt.contract.assert]