rust/tests/ui/regions/lifetime-not-long-enough-su...

48 lines
906 B
Rust

// #124563
use std::marker::PhantomData;
pub trait Trait {}
pub trait Foo {
type Trait: Trait;
type Bar: Bar;
fn foo(&mut self);
}
pub struct FooImpl<'a, 'b, A: Trait>(PhantomData<&'a &'b A>);
impl<'a, 'b, T> Foo for FooImpl<'a, 'b, T>
where
T: Trait,
{
type Trait = T;
type Bar = BarImpl<'a, 'b, T>; //~ ERROR lifetime bound not satisfied
fn foo(&mut self) {
self.enter_scope(|ctx| { //~ ERROR lifetime may not live long enough
BarImpl(ctx); //~ ERROR lifetime may not live long enough
});
}
}
impl<'a, 'b, T> FooImpl<'a, 'b, T>
where
T: Trait,
{
fn enter_scope(&mut self, _scope: impl FnOnce(&mut Self)) {}
}
pub trait Bar {
type Foo: Foo;
}
pub struct BarImpl<'a, 'b, T: Trait>(&'b mut FooImpl<'a, 'b, T>);
impl<'a, 'b, T> Bar for BarImpl<'a, 'b, T>
where
T: Trait,
{
type Foo = FooImpl<'a, 'b, T>;
}
fn main() {}