1.20.0[][src]Macro std::compile_error

macro_rules! compile_error {
    ($msg:expr) => { ... };
    ($msg:expr,) => { ... };
}

Unconditionally causes compilation to fail with the given error message when encountered.

This macro should be used when a crate uses a conditional compilation strategy to provide better error messages for erroneous conditions. It's the compiler-level form of panic!, which emits an error at runtime, rather than during compilation.

Examples

Two such examples are macros and #[cfg] environments.

Emit better compiler error if a macro is passed invalid values. Without the final branch, the compiler would still emit an error, but the error's message would not mention the two valid values.

This example deliberately fails to compile
macro_rules! give_me_foo_or_bar {
    (foo) => {};
    (bar) => {};
    ($x:ident) => {
        compile_error!("This macro only accepts `foo` or `bar`");
    }
}

give_me_foo_or_bar!(neither);
// ^ will fail at compile time with message "This macro only accepts `foo` or `bar`"Run

Emit compiler error if one of a number of features isn't available.

This example deliberately fails to compile
#[cfg(not(any(feature = "foo", feature = "bar")))]
compile_error!("Either feature \"foo\" or \"bar\" must be enabled for this crate.")Run