contract_assert
statement (since C++26)
From cppreference.com
C++
Feature test macros (C++20)
Concepts library (C++20)
Metaprogramming library (C++11)
Ranges library (C++20)
Filesystem library (C++17)
Concurrency support library (C++11)
Execution control library (C++26)
C++ language
Flow control
Conditional execution statements
Iteration statements (loops)
Jump statements
Functions
Function declaration
Lambda function expression
Dynamic exception specifications (until C++17*)
Exceptions
Namespaces
Types
Specifiers
Storage duration specifiers
Initialization
Alternative representations
Literals
Boolean - Integer - Floating-point
Character - String - nullptr (C++11)
User-defined (C++11)
Utilities
Attributes (C++11)
Types
Type alias declaration (C++11)
Casts
Memory allocation
Classes
Class-specific function properties
Special member functions
Templates
Miscellaneous
General topics
inline
specifier noexcept
specifier (C++11)typedef
declaration Statements
range for (C++11)
contract_assert (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.
[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]
[edit] See also
aborts the program if the user-specified condition is not true. May be disabled for release builds.
(function macro) [edit]
(function macro) [edit]
Contract assertions (C++26)
specifies properties that must hold at certain points during execution[edit]