error[E0308]: mismatched types --> $DIR/issue-102605.rs:13:20 | LL | convert_result(foo()) | -------------- ^^^^^ expected enum `Result`, found opaque type | | | arguments to this function are incorrect | note: while checking the return type of the `async fn` --> $DIR/issue-102605.rs:3:19 | LL | async fn foo() -> Result<(), String> { | ^^^^^^^^^^^^^^^^^^ checked the `Output` of this `async fn`, found opaque type = note: expected enum `Result<(), _>` found opaque type `impl Future>` note: function defined here --> $DIR/issue-102605.rs:7:4 | LL | fn convert_result(r: Result) -> Option { | ^^^^^^^^^^^^^^ --------------- help: consider `await`ing on the `Future` | LL | convert_result(foo().await) | ++++++ help: try wrapping the expression in `Err` | LL | convert_result(Err(foo())) | ++++ + error[E0277]: `main` has invalid return type `Option<()>` --> $DIR/issue-102605.rs:11:14 | LL | fn main() -> Option<()> { | ^^^^^^^^^^ `main` can only return types that implement `Termination` | = help: consider using `()`, or a `Result` error: aborting due to 2 previous errors Some errors have detailed explanations: E0277, E0308. For more information about an error, try `rustc --explain E0277`.