contract_assert statement (since C++26)
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.
Syntax
contract_assert attr (optional) ( predicate ) ; |
| attr | - | any number of attributes |
| predicate | - | boolean expression that should evaluate to true |
Keywords
Notes
| Feature-test macro | Value | Std | Feature |
|---|---|---|---|
__cpp_contracts | 202502L | (C++26) | Contracts |
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;
}
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 | 16 |
References
- C++26 standard (ISO/IEC 14882:2026):
- 8.(7+c ) Assertion statement [stmt.contract.assert]
See also
aborts the program if the user-specified condition is not true. May be disabled for release builds. (function macro) |
|
| Contract assertions (C++26) | specifies properties that must hold at certain points during execution |
static_assert declaration (C++11) | performs compile-time assertion checking |
| function contract specifiers (C++26) | specifies preconditions (pre) and postconditions (post) |
[[assume(expression)]](C++23) | specifies that the expression will always evaluate to true at a given point(attribute specifier) |
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/cpp/language/contract_assert