More TransparentWrapper impls (core::cmp::Reverse and core::num::Saturating) (#269)

* impl<T> TransparentWrapper<T> for core::cmp::Reverse<T>

* impl<T> TransparentWrapper<T> for core::num::Saturating<T>, with a new feature for non-base-MSRV stdlib TransparentWrapper impls.

* Restrict TransparentWrapper<T> for Reverse<T> to cfg(feature = "transparentwrapper_extra").

* nightly_docs for transparent_wrapper_extra

---------

Co-authored-by: Lokathor <zefria@gmail.com>
This commit is contained in:
zachs18 2024-10-31 05:30:11 +00:00 committed by GitHub
parent 79a15d0a3f
commit af8d110201
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 22 additions and 0 deletions

View File

@ -40,6 +40,11 @@ aarch64_simd = [] # MSRV 1.59.0: support aarch64 simd types
must_cast = [] # MSRV 1.64.0: support the `must` module. must_cast = [] # MSRV 1.64.0: support the `must` module.
# Adds `TransparentWrapper` impls for stdlib types newer than bytemuck's base MSRV.
# Current MSRV 1.74.0: `core::num::Saturating`.
# MSRV may increase if impls are added for newer types.
transparentwrapper_extra = []
const_zeroed = [] # MSRV 1.75.0: support const `zeroed()` const_zeroed = [] # MSRV 1.75.0: support const `zeroed()`
# Do not use if you can avoid it, because this is **unsound**!!!! # Do not use if you can avoid it, because this is **unsound**!!!!

View File

@ -303,3 +303,20 @@ pub unsafe trait TransparentWrapper<Inner: ?Sized> {
} }
unsafe impl<T> TransparentWrapper<T> for core::num::Wrapping<T> {} unsafe impl<T> TransparentWrapper<T> for core::num::Wrapping<T> {}
#[cfg(feature = "transparentwrapper_extra")]
#[cfg_attr(
feature = "nightly_docs",
doc(cfg(feature = "transparentwrapper_extra"))
)]
unsafe impl<T> TransparentWrapper<T> for core::num::Saturating<T> {}
// Note that `Reverse` existed since Rust 1.19.0, but was only made `#[repr(transparent)]`
// in Rust 1.52.0 (PR: https://github.com/rust-lang/rust/pull/81879), so we have it under
// the same feature as `Saturating`, which was stabilized in Rust 1.74.0, so that this
// impl cannot be used on a version before 1.52.0 where it would be unsound.
#[cfg(feature = "transparentwrapper_extra")]
#[cfg_attr(
feature = "nightly_docs",
doc(cfg(feature = "transparentwrapper_extra"))
)]
unsafe impl<T> TransparentWrapper<T> for core::cmp::Reverse<T> {}