diff options
Diffstat (limited to 'library/alloc/src/vec/is_zero.rs')
| -rw-r--r-- | library/alloc/src/vec/is_zero.rs | 9 |
1 files changed, 8 insertions, 1 deletions
diff --git a/library/alloc/src/vec/is_zero.rs b/library/alloc/src/vec/is_zero.rs index 0efc4893c3c..868f2f1e323 100644 --- a/library/alloc/src/vec/is_zero.rs +++ b/library/alloc/src/vec/is_zero.rs @@ -2,7 +2,7 @@ use crate::boxed::Box; #[rustc_specialization_trait] pub(super) unsafe trait IsZero { - /// Whether this value is zero + /// Whether this value's representation is all zeros fn is_zero(&self) -> bool; } @@ -49,6 +49,13 @@ unsafe impl<T> IsZero for *mut T { } } +unsafe impl<T: IsZero, const N: usize> IsZero for [T; N] { + #[inline] + fn is_zero(&self) -> bool { + self.iter().all(IsZero::is_zero) + } +} + // `Option<&T>` and `Option<Box<T>>` are guaranteed to represent `None` as null. // For fat pointers, the bytes that would be the pointer metadata in the `Some` // variant are padding in the `None` variant, so ignoring them and |
