// issue: #84591 // Subtrait was able to incorrectly extend supertrait lifetimes even when // supertrait had weaker implied bounds than subtrait. trait Subtrait: Supertrait {} trait Supertrait { fn action(self); } fn subs_to_soup(x: T) where T: Subtrait, { soup(x) } fn soup(x: T) { x.action(); } impl<'a, 'b: 'a> Supertrait for (&'b str, &mut &'a str) { fn action(self) { *self.1 = self.0; } } impl<'a, 'b> Subtrait<&'a &'b str> for (&'b str, &mut &'a str) {} fn main() { let mut d = "hi"; { let x = "Hello World".to_string(); subs_to_soup((x.as_str(), &mut d)); //~^ does not live long enough } println!("{}", d); }