| // Repro for <https://github.com/rust-lang/rust/issues/92415#issue-1090723521>. |
| //@ edition: 2021 |
| //@ revisions: assumptions no_assumptions |
| //@[assumptions] compile-flags: -Zhigher-ranked-assumptions |
| //@[assumptions] known-bug: unknown |
| //@[no_assumptions] known-bug: #110338 |
| |
| use std::any::Any; |
| use std::future::Future; |
| |
| trait Foo<'a>: Sized { |
| type Error; |
| fn foo(x: &'a str) -> Result<Self, Self::Error>; |
| } |
| |
| impl<'a> Foo<'a> for &'a str { |
| type Error = (); |
| |
| fn foo(x: &'a str) -> Result<Self, Self::Error> { |
| Ok(x) |
| } |
| } |
| |
| async fn get_foo<'a, T>(x: &'a str) -> Result<T, <T as Foo<'a>>::Error> |
| where |
| T: Foo<'a>, |
| { |
| Foo::foo(x) |
| } |
| |
| fn bar<'a>(x: &'a str) -> Box<dyn Future<Output = Result<&'a str, ()>> + Send + 'a> { |
| Box::new(async move { get_foo(x).await }) |
| } |
| |
| fn main() {} |