chiark / gitweb /
sealed better
authorIan Jackson <ijackson@chiark.greenend.org.uk>
Thu, 14 Nov 2024 22:18:11 +0000 (22:18 +0000)
committerIan Jackson <ijackson@chiark.greenend.org.uk>
Thu, 14 Nov 2024 22:18:11 +0000 (22:18 +0000)
src/lib.rs

index 55d3733e0bebfe6e43997b1c7cb274222023932f..7ce6970c75f9cdcee8a15bcb60cf2b9423c4244f 100644 (file)
@@ -61,29 +61,25 @@ pub unsafe trait IsMutToken<'a>: IsRefToken<'a> + Sized + Sealed {
 mod sealed { pub trait Sealed {} }
 use sealed::Sealed;
 
-macro_rules! impl_is { { $(
-    unsafe impl [$($gens:tt)*] $trait:ty, for $ty:ty {}
-)* } => { $(
-    unsafe impl <$($gens   )*> $trait    for $ty    {}
-    impl        <$($gens   )*> Sealed    for $ty    {}
-)* } }
-impl_is! {
-
-unsafe impl['a] IsRefToken<'a>, for &'a NoAliasSingleton {}
-unsafe impl['a] IsRefToken<'a>, for &'a mut NoAliasSingleton {}
-unsafe impl['a] IsMutToken<'a>, for &'a mut NoAliasSingleton {}
-unsafe impl['a] IsRefToken<'a>, for RefToken<'a> {}
-unsafe impl['a] IsRefToken<'a>, for MutToken<'a> {}
-unsafe impl['a] IsMutToken<'a>, for MutToken<'a> {}
-unsafe impl['a, A: IsRefToken<'a>] IsRefToken<'a>, for &'a A {}
-
-unsafe impl['r, 'a, 'aa, A] IsRefToken<'r>, for &'aa mut A
+unsafe impl<'a> IsRefToken<'a> for &'a NoAliasSingleton {}
+unsafe impl<'a> IsRefToken<'a> for &'a mut NoAliasSingleton {}
+unsafe impl<'a> IsMutToken<'a> for &'a mut NoAliasSingleton {}
+unsafe impl<'a> IsRefToken<'a> for RefToken<'a> {}
+unsafe impl<'a> IsRefToken<'a> for MutToken<'a> {}
+unsafe impl<'a> IsMutToken<'a> for MutToken<'a> {}
+unsafe impl<'a, A: IsRefToken<'a>> IsRefToken<'a> for &'a A {}
+
+unsafe impl<'r, 'a, 'aa, A> IsRefToken<'r> for &'aa mut A
 where A: IsMutToken<'a>, 'a: 'r, 'aa: 'r {}
 
-unsafe impl['r, 'a, 'aa, A] IsMutToken<'r>, for &'aa mut A
+unsafe impl<'r, 'a, 'aa, A> IsMutToken<'r> for &'aa mut A
 where A: IsMutToken<'a>, 'a: 'r, 'aa: 'r {}
 
-}
+impl Sealed for RefToken<'_> {}
+impl Sealed for MutToken<'_> {}
+impl Sealed for NoAliasSingleton {}
+impl<T: Sealed> Sealed for &    T {}
+impl<T: Sealed> Sealed for &mut T {}
 
 /// `&NoAliasSingleton`, but a ZST
 ///