chiark / gitweb /
owned
authorIan Jackson <ijackson@chiark.greenend.org.uk>
Thu, 14 Nov 2024 20:39:39 +0000 (20:39 +0000)
committerIan Jackson <ijackson@chiark.greenend.org.uk>
Thu, 14 Nov 2024 21:49:40 +0000 (21:49 +0000)
src/lib.rs

index 65d4f209623e0524155183e47218a69a13716f63..c651a810db9be719a3aaa8fb19f16e84d3fd5251 100644 (file)
@@ -16,10 +16,10 @@ pub struct NoAliasSingleton {
 ///
 /// Implemented for `NoAliasSingleton` and the ZST reference tokens,
 /// and `&`-references to them.
-pub unsafe trait IsRefToken<'a> {
+pub unsafe trait IsRefToken<'a>: Sized {
     /// Obtain a new ZST token from something that might be a real object.
     #[inline]
-    fn ref_token(&'a self) -> RefToken<'a> {
+    fn ref_token(self) -> RefToken<'a> {
         RefToken(PhantomData)
     }
 }
@@ -28,17 +28,17 @@ pub unsafe trait IsRefToken<'a> {
 ///
 /// Implemented for `NoAliasSingleton` and `MutToken`,
 /// and `&mut`-references to them.
-pub unsafe trait IsMutToken<'a>: IsRefToken<'a> {
+pub unsafe trait IsMutToken<'a>: IsRefToken<'a> + Sized {
     /// Obtain a new ZST token from something that might be a real object.
     #[inline]
-    fn mut_token<'r, 's>(&'s mut self) -> MutToken<'r>
+    fn mut_token<'r, 's>(mut self) -> MutToken<'r>
     where 's: 'r, 'a: 'r,
     {
         MutToken(PhantomData)
     }
 
-    fn multi_static<'r, 's>(&'s mut self) -> MultiStatic<'r, ()>
-    where 's: 'r, 'a: 'r,
+    fn multi_static<'r>(mut self) -> MultiStatic<'r, ()>
+    where 'a: 'r,
     {
         MultiStatic {
             tok: self.mut_token(),
@@ -46,8 +46,9 @@ pub unsafe trait IsMutToken<'a>: IsRefToken<'a> {
         }
     }
 }
-unsafe impl<'a> IsRefToken<'a> for NoAliasSingleton {}
-unsafe impl<'a> IsMutToken<'a> for NoAliasSingleton {}
+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> {}