// check-pass #![feature(type_alias_impl_trait)] type X = impl ToString; fn f(a: A, b: B) -> (X, X) { (a.clone(), a) } pub trait Captures<'a> {} impl<'a, T: ?Sized> Captures<'a> for T {} type Foo<'a, 'b> = impl std::fmt::Debug + Captures<'a> + Captures<'b>; fn foo<'x, 'y>(i: &'x i32, j: &'y i32) -> (Foo<'x, 'y>, Foo<'y, 'x>) { (i, j) } fn main() { println!("{}", as ToString>::to_string(&f(42_i32, String::new()).1)); let meh = 42; let muh = 69; println!("{:?}", foo(&meh, &muh)); }