contract_assert
statement(since C++26)General topics | ||||||||||||||||
Flow control | ||||||||||||||||
Conditional execution statements | ||||||||||||||||
Iteration statements (loops) | ||||||||||||||||
Jump statements | ||||||||||||||||
Functions | ||||||||||||||||
Function declaration | ||||||||||||||||
Lambda function expression | ||||||||||||||||
inline specifier | ||||||||||||||||
Dynamic exception specifications(until C++17*) | ||||||||||||||||
noexcept specifier(C++11) | ||||||||||||||||
Exceptions | ||||||||||||||||
Namespaces | ||||||||||||||||
Types | ||||||||||||||||
Specifiers | ||||||||||||||||
| ||||||||||||||||
Storage duration specifiers | ||||||||||||||||
Initialization | ||||||||||||||||
Expressions | ||||||||||||||||
Alternative representations | ||||||||||||||||
Literals | ||||||||||||||||
Boolean -Integer -Floating-point | ||||||||||||||||
Character -String -nullptr(C++11) | ||||||||||||||||
User-defined(C++11) | ||||||||||||||||
Utilities | ||||||||||||||||
Attributes(C++11) | ||||||||||||||||
Types | ||||||||||||||||
typedef declaration | ||||||||||||||||
Type alias declaration(C++11) | ||||||||||||||||
Casts | ||||||||||||||||
Memory allocation | ||||||||||||||||
Classes | ||||||||||||||||
Class-specific function properties | ||||||||||||||||
| ||||||||||||||||
Special member functions | ||||||||||||||||
Templates | ||||||||||||||||
Miscellaneous | ||||||||||||||||
Acontract_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 tofalse or the evaluation exits via an exception, and can be ignored in release builds for performance.
Contents |
contract_assert attr (optional)( predicate) ; | |||||||||
attr | - | any number ofattributes |
predicate | - | boolean expression that should evaluate totrue |
Feature-test macro | Value | Std | Feature |
---|---|---|---|
__cpp_contracts | 202502L | (C++26) | Contracts |
Thecontract_assert ensures that vector's norm is positive and eithernormal or subnormal.
template<std::floating_point T>constexprauto normalize(std::array<T,3> vector)noexcept pre(/* is_normalizable(vector) */) post(/* vector: is_normalized(vector) */){auto&[x, y, z]{vector};constauto 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;}
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 |
aborts the program if the user-specified condition is nottrue. May be disabled for release builds. (function macro)[edit] | |
Contract assertions(C++26) | specifies properties that must hold at certain points during execution[edit] |
static_assert declaration(C++11) | performs compile-time assertion checking[edit] |
function contract specifiers(C++26) | specifies preconditions (pre) and postconditions (post)[edit] |
[[assume(expression)]] (C++23) | specifies that theexpression will always evaluate totrue at a given point (attribute specifier)[edit] |