}
nonzero_unsigned_is_power_of_two! { NonZeroU8 NonZeroU16 NonZeroU32 NonZeroU64 NonZeroU128 NonZeroUsize }
+
+macro_rules! nonzero_min_max_unsigned {
+ ( $( $Ty: ident($Int: ident); )+ ) => {
+ $(
+ impl $Ty {
+ /// The smallest value that can be represented by this non-zero
+ /// integer type, 1.
+ ///
+ /// Note: While most integer types are defined for every whole
+ /// number between `MIN` and `MAX`, signed non-zero integers are
+ /// a special case. They have a "gap" at 0.
+ ///
+ /// # Examples
+ ///
+ /// ```
+ /// #![feature(nonzero_min_max)]
+ #[doc = concat!("# use std::num::", stringify!($Ty), ";")]
+ ///
+ #[doc = concat!("assert_eq!(", stringify!($Ty), "::MIN.get(), 1", stringify!($Int), ");")]
+ /// ```
+ #[unstable(feature = "nonzero_min_max", issue = "89065")]
+ pub const MIN: Self = Self::new(1).unwrap();
+
+ /// The largest value that can be represented by this non-zero
+ /// integer type,
+ #[doc = concat!("equal to [`", stringify!($Int), "::MAX`].")]
+ ///
+ /// Note: While most integer types are defined for every whole
+ /// number between `MIN` and `MAX`, signed non-zero integers are
+ /// a special case. They have a "gap" at 0.
+ ///
+ /// # Examples
+ ///
+ /// ```
+ /// #![feature(nonzero_min_max)]
+ #[doc = concat!("# use std::num::", stringify!($Ty), ";")]
+ ///
+ #[doc = concat!("assert_eq!(", stringify!($Ty), "::MAX.get(), ", stringify!($Int), "::MAX);")]
+ /// ```
+ #[unstable(feature = "nonzero_min_max", issue = "89065")]
+ pub const MAX: Self = Self::new(<$Int>::MAX).unwrap();
+ }
+ )+
+ }
+}
+
+macro_rules! nonzero_min_max_signed {
+ ( $( $Ty: ident($Int: ident); )+ ) => {
+ $(
+ impl $Ty {
+ /// The smallest value that can be represented by this non-zero
+ /// integer type,
+ #[doc = concat!("equal to [`", stringify!($Int), "::MIN`].")]
+ ///
+ /// # Examples
+ ///
+ /// ```
+ /// #![feature(nonzero_min_max)]
+ #[doc = concat!("# use std::num::", stringify!($Ty), ";")]
+ ///
+ #[doc = concat!("assert_eq!(", stringify!($Ty), "::MIN.get(), ", stringify!($Int), "::MIN);")]
+ /// ```
+ #[unstable(feature = "nonzero_min_max", issue = "89065")]
+ pub const MIN: Self = Self::new(<$Int>::MIN).unwrap();
+
+ /// The largest value that can be represented by this non-zero
+ /// integer type,
+ #[doc = concat!("equal to [`", stringify!($Int), "::MAX`].")]
+ ///
+ /// # Examples
+ ///
+ /// ```
+ /// #![feature(nonzero_min_max)]
+ #[doc = concat!("# use std::num::", stringify!($Ty), ";")]
+ ///
+ #[doc = concat!("assert_eq!(", stringify!($Ty), "::MAX.get(), ", stringify!($Int), "::MAX);")]
+ /// ```
+ #[unstable(feature = "nonzero_min_max", issue = "89065")]
+ pub const MAX: Self = Self::new(<$Int>::MAX).unwrap();
+ }
+ )+
+ }
+}
+
+nonzero_min_max_unsigned! {
+ NonZeroU8(u8);
+ NonZeroU16(u16);
+ NonZeroU32(u32);
+ NonZeroU64(u64);
+ NonZeroU128(u128);
+ NonZeroUsize(usize);
+}
+
+nonzero_min_max_signed! {
+ NonZeroI8(i8);
+ NonZeroI16(i16);
+ NonZeroI32(i32);
+ NonZeroI64(i64);
+ NonZeroI128(i128);
+ NonZeroIsize(isize);
+}