// check-pass // known-bug: #84591 // Should fail. Subtrait can incorrectly extend supertrait lifetimes even when // supertrait has weaker implied bounds than subtrait. Strongly related to // issue #25860. 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)); } println!("{}", d); }