// Copyright 2018 The Chromium OS Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. //! Macros that assert properties of code at compile time. //! //! A static assertion is particularly appropriate when unsafe code relies on //! two types to have the same size, or on some type to have a particular size. #[doc(hidden)] pub mod mechanism; // Re-export so that these types appear with a more concise name in error // messages. #[doc(hidden)] pub use crate::mechanism::*; /// Macro that fails to compile if a given const expression is not true. /// /// # Example /// /// ```rust /// use assertions::const_assert; /// /// fn main() { /// const_assert!(std::mem::size_of::() == 24); /// } /// ``` /// /// # Example that fails to compile /// /// ```rust,compile_fail /// use assertions::const_assert; /// /// fn main() { /// // fails to compile: /// const_assert!(std::mem::size_of::() == 8); /// } /// ``` #[macro_export] macro_rules! const_assert { ($e:expr) => { let _: $crate::Assert<[(); $e as bool as usize]>; }; }