[][src]Macro static_assertions::const_assert

macro_rules! const_assert {
    ($($xs:tt)+) => { ... };
}

Asserts that constant expressions evaluate to true.

Constant expressions can be ensured to have certain properties via this macro If the expression evaluates to false, the file will fail to compile. This is synonymous to static_assert in C++.

Alternatives

There also exists const_assert_eq for validating whether a sequence of expressions are equal to one another.

Examples

Some expressions are blatantly false:

This example deliberately fails to compile
const_assert!(1 >= 2);

Inputs are type-checked as booleans:

This example deliberately fails to compile
const_assert!(!0);

Despite this being a macro, we see this produces a type error:

  | const_assert!(!0);
  |               ^^ expected bool, found integral variable
  |
  = note: expected type `bool`
             found type `{integer}`

On stable Rust, using the macro requires a unique “label” when used in a module scope:

const_assert!(meaning_of_life; 42 == !!42);

The labeling limitation is not necessary if compiling on nightly Rust with the nightly feature enabled:

This example is not tested
#![feature(underscore_const_names)]

const FIVE: usize = 5;

const_assert!(FIVE * FIVE == 25);

fn main() {
    const_assert!(2 + 2 == 4);
    const_assert!(FIVE - FIVE == 0);
}