// check-pass // related to #113916, check that using RPITs in functions with lifetime params // which are constrained to be equal compiles. trait Trait<'a, 'b> {} impl Trait<'_, '_> for () {} fn pass<'a: 'b, 'b: 'a>() -> impl Trait<'a, 'b> { (|| {})() } struct Foo<'a>(&'a ()); impl<'a> Foo<'a> { fn bar<'b: 'a>(&'b self) -> impl Trait<'a, 'b> { let _: &'a &'b &'a (); } } fn main() {}