Namespaces
Variants

contract_assert statement (since C++26)

From cppreference.net
C++ language
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
constexpr (C++11)
consteval (C++20)
constinit (C++20)
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

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.

Contents

Syntax

contract_assert attr  (optional) ( predicate ) ;
attr - any number of attributes
predicate - boolean expression that should evaluate to true

Keywords

contract_assert

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

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)