This commit is contained in:
2025-10-25 03:02:53 +03:00
commit 043225d523
3416 changed files with 681196 additions and 0 deletions

View File

@@ -0,0 +1,72 @@
[assertions.assert]
# 19 Diagnostics library [[diagnostics]](./#diagnostics)
## 19.3 Assertions [[assertions]](assertions#assert)
### 19.3.3 The assert macro [assertions.assert]
[1](#1)
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/diagnostics.tex#L465)
If NDEBUG is defined as a macro name
at the point in the source file where <cassert> is included,
the assert macro is defined as#define assert(...) ((void)0)
[2](#2)
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/diagnostics.tex#L473)
Otherwise, the assert macro puts a diagnostic test into programs;
it expands to an expression of type void which
has the following effects:
- [(2.1)](#2.1)
__VA_ARGS__ is evaluated and contextually converted to bool[.](#2.1.sentence-1)
- [(2.2)](#2.2)
If the evaluation yields true there are no further effects[.](#2.2.sentence-1)
- [(2.3)](#2.3)
Otherwise, the assert macro's expression
creates a diagnostic on the standard error stream (ISO/IEC 9899:2024, 7.23.3) in animplementation-defined
format and calls abort()[.](#2.3.sentence-1)
The diagnostic contains #__VA_ARGS__ and
information on
the name of the source file,
the source line number, and
the name of the enclosing function
(such as provided by source_location::current())[.](#2.3.sentence-2)
[3](#3)
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/diagnostics.tex#L496)
If __VA_ARGS__ does not expand to
an [*assignment-expression*](expr.assign#nt:assignment-expression "7.6.19Assignment and compound assignment operators[expr.assign]"),
the program is ill-formed[.](#3.sentence-1)
[4](#4)
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/diagnostics.tex#L501)
The macro assert is redefined according to
the current state of NDEBUG each time that<cassert> is included[.](#4.sentence-1)
[5](#5)
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/diagnostics.tex#L506)
An expression assert(E) is a [constant subexpression](defns.const.subexpr "3.15constant subexpression[defns.const.subexpr]"), if
- [(5.1)](#5.1)
NDEBUG is defined at the point where assert is last defined or redefined, or
- [(5.2)](#5.2)
E [contextually converted to bool](conv#def:conversion,contextual_to_bool "7.3Standard conversions[conv]") is a constant subexpression that evaluates to the value true[.](#5.sentence-1)

View File

@@ -0,0 +1,14 @@
[assertions.general]
# 19 Diagnostics library [[diagnostics]](./#diagnostics)
## 19.3 Assertions [[assertions]](assertions#general)
### 19.3.1 General [assertions.general]
[1](#1)
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/diagnostics.tex#L452)
The header <cassert> provides a macro for documenting C++ program assertions and a mechanism
for disabling the assertion checks through defining the macro NDEBUG[.](#1.sentence-1)