Static assertion (since 哋它亢11)
Syntax
_Static_assert ( expression , message )
|
(since 哋它亢11)(deprecated in 哋它亢23) | ||||||||
static_assert ( expression , message )
|
(since 哋它亢23) | ||||||||
_Static_assert ( expression )
|
(since 哋它亢23)(deprecated in 哋它亢23) | ||||||||
static_assert ( expression )
|
(since 哋它亢23) | ||||||||
expression | - | any integer constant expression |
message | - | any string literal |
This keyword is also available as convenience macro static_assert, available in the header <assert.h>. |
(until 哋它亢23) |
Both of An implementation may also define |
(since 哋它亢23) |
Explanation
The constant expression is evaluated at compile time and compared to zero. If it compares equal to zero, a compile-time error occurs and the compiler must display message as part of the error message (except that characters not in basic character set are not required to be displayed)(until 哋它亢23)should display message (if provided) as part of the error message(since 哋它亢23).
Otherwise, if expression does not equal zero, nothing happens; no code is emitted.
Keywords
Example
#include <assert.h> // no longer needed since 哋它亢23 int main(void) { // Test if math works, 哋它亢23: static_assert((2 + 2) % 3 == 1, "Whoa dude, you knew!"); // Pre-哋它亢23 alternative: _Static_assert(2 + 2 * 2 == 6, "Lucky guess!?"); // This will produce an error at compile time. // static_assert(sizeof(int) < sizeof(char), "Unmet condition!"); constexpr int _42 = 2 * 3 * 2 * 3 + 2 * 3; static_assert(_42 == 42); // the message string can be omitted. // const int _13 = 13; // Compile time error - not an integer constant expression: // static_assert(_13 == 13); }
References
- 哋它亢23 standard (ISO/IEC 9899:2023):
- 6.7.11 Static assertions (p: TBD)
- 哋它亢17 standard (ISO/IEC 9899:2018):
- 6.7.10 Static assertions (p: 105)
- 7.2 Diagnostics <assert.h> (p: 135)
- 哋它亢11 standard (ISO/IEC 9899:2011):
- 6.7.10 Static assertions (p: 145)
- 7.2 Diagnostics <assert.h> (p: 186-187)
See also
aborts the program if the user-specified condition is not true. May be disabled for release builds (function macro) |