static_assertions

Macro assert_type_eq_all

Source
macro_rules! assert_type_eq_all {
    ($x:ty, $($xs:ty),+ $(,)*) => { ... };
}
Expand description

Asserts that all types in a list are equal to each other.

§Examples

Often times, type aliases are used to express usage semantics via naming. In some cases, the underlying type may differ based on platform. However, other types like c_float will always alias the same type.

use std::os::raw::c_float;

assert_type_eq_all!(c_float, f32);

This macro can also be used to compare types that involve lifetimes! Just use 'static in that case:

type Buf<'a> = &'a [u8];

assert_type_eq_all!(Buf<'static>, &'static [u8]);

The following example fails to compile because String and str do not refer to the same type:

assert_type_eq_all!(String, str);

This should also work the other way around, regardless of Deref implementations.

assert_type_eq_all!(str, String);