// This test checks that we correctly reject the following unsound code. trait Lengthen { fn lengthen(self) -> T; } impl<'a> Lengthen<&'a str> for &'a str { fn lengthen(self) -> &'a str { self } } trait Gat { type Gat<'a>: for<'b> Lengthen>; fn lengthen(s: Self::Gat<'_>) -> Self::Gat<'static> { s.lengthen() } } impl Gat for () { type Gat<'a> = &'a str; //~ ERROR: implementation of `Lengthen` is not general enough } fn main() { let s = "hello, garbage".to_string(); let borrow: &'static str = <() as Gat>::lengthen(&s); drop(s); println!("{borrow}"); }