From ce49e3225e19ade67cfc6dfcb1b27db621823fcf Mon Sep 17 00:00:00 2001 From: Steve Klabnik Date: Thu, 7 Jan 2016 14:09:20 -0500 Subject: [PATCH] Expand EO308 to mention try! Fixes #28953 --- src/librustc/diagnostics.rs | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/src/librustc/diagnostics.rs b/src/librustc/diagnostics.rs index 178d8a87214..3aabe4b4931 100644 --- a/src/librustc/diagnostics.rs +++ b/src/librustc/diagnostics.rs @@ -1822,6 +1822,30 @@ let x: i32 = "I am not a number!"; // | // type `i32` assigned to variable `x` ``` + +Another situation in which this occurs is when you attempt to use the `try!` +macro inside a function that does not return a `Result`: + +``` +use std::fs::File; + +fn main() { + let mut f = try!(File::create("foo.txt")); +} +``` + +This code gives an error like this: + +```text +:5:8: 6:42 error: mismatched types: + expected `()`, + found `core::result::Result<_, _>` + (expected (), + found enum `core::result::Result`) [E0308] +``` + +`try!` returns a `Result`, and so the function must. But `main()` has +`()` as its return type, hence the error. "##, E0309: r##"