[This works](https://play.rust-lang.org/?gist=90f4a0519b6dc16a9961adbc87c26ab9&version=stable&backtrace=0) ``` rust #![allow(unused)] fn f<F>() -> Result<Option<F>, ()> { panic!() } fn g<G>() -> Option<G> { f().unwrap().unwrap() } ``` [This does not](https://play.rust-lang.org/?gist=eb70e71a893d2c60ef0290a5149c6a7c&version=stable&backtrace=0): ``` rust #![allow(unused)] fn f<F>() -> Result<Option<F>, ()> { panic!() } fn g<G>() -> Option<G> where Option<G>: Sized { // <-- f().unwrap().unwrap() } ```