diff options
Diffstat (limited to 'assertions/src/lib.rs')
-rw-r--r-- | assertions/src/lib.rs | 47 |
1 files changed, 47 insertions, 0 deletions
diff --git a/assertions/src/lib.rs b/assertions/src/lib.rs new file mode 100644 index 0000000..c53c0c4 --- /dev/null +++ b/assertions/src/lib.rs @@ -0,0 +1,47 @@ +// 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 mechanism::*; + +/// Macro that fails to compile if a given const expression is not true. +/// +/// # Example +/// +/// ```rust +/// extern crate assertions; +/// use assertions::const_assert; +/// +/// fn main() { +/// const_assert!(std::mem::size_of::<String>() == 24); +/// } +/// ``` +/// +/// # Example that fails to compile +/// +/// ```rust,compile_fail +/// extern crate assertions; +/// use assertions::const_assert; +/// +/// fn main() { +/// // fails to compile: +/// const_assert!(std::mem::size_of::<String>() == 8); +/// } +/// ``` +#[macro_export] +macro_rules! const_assert { + ($e:expr) => { + let _: $crate::Assert<[(); $e as bool as usize]>; + }; +} |