| //@ build-fail |
| //@compile-flags: -Cdebuginfo=2 -Copt-level=0 --crate-type lib |
| //~^^ ERROR: reached the recursion limit while instantiating |
| trait Trait { |
| type Output; |
| } |
| |
| impl<O, F: Fn() -> O> Trait for F { |
| type Output = O; |
| } |
| |
| struct Wrap<P>(P); |
| struct WrapOutput<O>(O); |
| |
| impl<P: Trait> Trait for Wrap<P> { |
| type Output = WrapOutput<P::Output>; |
| } |
| |
| fn wrap<P: Trait>(x: P) -> impl Trait { |
| Wrap(x) |
| } |
| |
| fn consume<P: Trait>(_: P) -> P::Output { |
| unimplemented!() |
| } |
| |
| pub fn recurse() -> impl Sized { |
| consume(wrap(recurse)) |
| } |
| pub fn main() {} |