Macro kernel::prelude::build_assert
source · macro_rules! build_assert { ($cond:expr $(,)?) => { ... }; ($cond:expr, $msg:expr) => { ... }; }
Expand description
Asserts that a boolean expression is true
at compile time.
If the condition is evaluated to false
in const context, build_assert!
will panic. If the compiler or optimizer cannot guarantee the condition will
be evaluated to true
, a build error will be triggered.
static_assert!
should be preferred to build_assert!
whenever possible.
Examples
These examples show that different types of assert!
will trigger errors
at different stage of compilation. It is preferred to err as early as
possible, so static_assert!
should be used whenever possible.
ⓘ
fn foo() {
static_assert!(1 > 1); // Compile-time error
build_assert!(1 > 1); // Build-time error
assert!(1 > 1); // Run-time error
}
When the condition refers to generic parameters or parameters of an inline function,
static_assert!
cannot be used. Use build_assert!
in this scenario.
fn foo<const N: usize>() {
// `static_assert!(N > 1);` is not allowed
build_assert!(N > 1); // Build-time check
assert!(N > 1); // Run-time check
}
#[inline]
fn bar(n: usize) {
// `static_assert!(n > 1);` is not allowed
build_assert!(n > 1); // Build-time check
assert!(n > 1); // Run-time check
}