//@ run-pass | |
struct A<F: FnOnce()->T,T>(F::Output); | |
struct B<F: FnOnce()->T,T>(A<F,T>); | |
// Removing Option causes it to compile. | |
fn foo<T,F: FnOnce()->T>(f: F) -> Option<B<F,T>> { | |
Some(B(A(f()))) | |
} | |
fn main() { | |
let v = (|| foo(||4))(); | |
match v { | |
Some(B(A(4))) => {}, | |
_ => unreachable!() | |
} | |
} |