| 293 | |
| 294 | #[test] |
| 295 | fn derive_deref() { |
| 296 | struct X([u8; 3]); |
| 297 | |
| 298 | impl core::ops::Deref for X { |
| 299 | type Target = [u8]; |
| 300 | |
| 301 | fn deref(&self) -> &Self::Target { |
| 302 | &self.0 |
| 303 | } |
| 304 | } |
| 305 | |
| 306 | impl core::ops::DerefMut for X { |
| 307 | fn deref_mut(&mut self) -> &mut Self::Target { |
| 308 | &mut self.0 |
| 309 | } |
| 310 | } |
| 311 | |
| 312 | #[derive(Zeroize, ZeroizeOnDrop)] |
| 313 | struct Z(X); |
| 314 | |
| 315 | let mut value = Z(X([1, 2, 3])); |
| 316 | unsafe { |
| 317 | ptr::drop_in_place(&raw mut value); |
| 318 | } |
| 319 | assert_eq!(&value.0.0, &[0, 0, 0]); |
| 320 | } |
| 321 | |
| 322 | #[test] |
| 323 | #[cfg(feature = "alloc")] |