@@ -210,27 +210,27 @@ impl Validity for Valid {
210210///
211211/// As a consequence, if `T: Read<A, R>`, then any `Ptr<T, (A, ...)>` is
212212/// permitted to perform unsynchronized reads from its referent.
213- pub trait Read < A : Aliasing , R : ReadReason > { }
213+ #[ cfg_attr( __ZEROCOPY_INTERNAL_USE_ONLY_NIGHTLY_FEATURES_IN_TESTS, marker) ]
214+ pub unsafe trait Read < A : Aliasing , R > { }
214215
215- impl < A : Reference , T : ?Sized + crate :: Immutable > Read < A , BecauseImmutable > for T { }
216- impl < T : ?Sized > Read < Exclusive , BecauseExclusive > for T { }
217-
218- /// Used to disambiguate [`Read`] impls.
219- pub trait ReadReason : Sealed { }
220-
221- /// Unsynchronized reads are permitted because only one live [`Ptr`](crate::Ptr)
222- /// or reference may exist to the referent bytes at a time.
223- #[ derive( Copy , Clone , Debug ) ]
224- #[ doc( hidden) ]
225- pub enum BecauseExclusive { }
226- impl ReadReason for BecauseExclusive { }
227-
228- /// Unsynchronized reads are permitted because no live [`Ptr`](crate::Ptr)s or
229- /// references permit interior mutation.
230- #[ derive( Copy , Clone , Debug ) ]
231- #[ doc( hidden) ]
232- pub enum BecauseImmutable { }
233- impl ReadReason for BecauseImmutable { }
216+ define_because ! (
217+ /// Unsynchronized reads are permitted because only one live
218+ /// [`Ptr`](crate::Ptr) or reference may exist to the referent bytes at a
219+ /// time.
220+ #[ doc( hidden) ]
221+ pub BecauseExclusive
222+ ) ;
223+ // SAFETY: The aliasing parameter is `Exclusive`.
224+ unsafe impl < T : ?Sized > Read < Exclusive , BecauseExclusive > for T { }
225+
226+ define_because ! (
227+ /// Unsynchronized reads are permitted because no live [`Ptr`](crate::Ptr)s
228+ /// or references permit interior mutation.
229+ #[ doc( hidden) ]
230+ pub BecauseImmutable
231+ ) ;
232+ // SAFETY: `T: Immutable`.
233+ unsafe impl < A : Reference , T : ?Sized + crate :: Immutable > Read < A , BecauseImmutable > for T { }
234234
235235use sealed:: Sealed ;
236236mod sealed {
@@ -251,9 +251,6 @@ mod sealed {
251251 impl Sealed for Valid { }
252252
253253 impl < A : Sealed , AA : Sealed , V : Sealed > Sealed for ( A , AA , V ) { }
254-
255- impl Sealed for BecauseImmutable { }
256- impl Sealed for BecauseExclusive { }
257254}
258255
259256pub use mapping:: * ;
0 commit comments