//@ run-pass | |
#![allow(unused_variables)] | |
pub trait TryTransform { | |
fn try_transform<F>(self, f: F) | |
where | |
Self: Sized, | |
F: FnOnce(Self); | |
} | |
impl<'a, T> TryTransform for &'a mut T { | |
fn try_transform<F>(self, f: F) | |
where | |
// The bug was that `Self: Sized` caused the lifetime of `this` to "extend" for all | |
// of 'a instead of only lasting as long as the binding is used (for just that line). | |
Self: Sized, | |
F: FnOnce(Self), | |
{ | |
let this: *mut T = self as *mut T; | |
f(self); | |
} | |
} | |
fn main() { | |
} |