| use std::marker::PhantomData; | |
| #[derive(PartialEq, Eq)] | |
| pub struct InvariantRef<'a, T: ?Sized>(&'a T, PhantomData<&'a mut &'a T>); | |
| impl<'a, T: ?Sized> InvariantRef<'a, T> { | |
| pub const fn new(r: &'a T) -> Self { | |
| InvariantRef(r, PhantomData) | |
| } | |
| } | |
| impl<'a> InvariantRef<'a, ()> { | |
| pub const NEW: Self = InvariantRef::new(&()); | |
| } | |
| fn equate<T>(x: T, y: T){} | |
| fn foo<'a>() { | |
| let y = (); | |
| equate(InvariantRef::new(&y), const { InvariantRef::<'a>::NEW }); | |
| //~^ ERROR `y` does not live long enough [E0597] | |
| } | |
| fn main() { | |
| foo(); | |
| } |