catch_expr

The tracking issue for this feature is: #31436


The catch_expr feature adds support for a catch expression. The catch expression creates a new scope one can use the ? operator in.


# #![allow(unused_variables)]
#![feature(catch_expr)]

#fn main() {
use std::num::ParseIntError;

let result: Result<i32, ParseIntError> = do catch {
    "1".parse::<i32>()?
        + "2".parse::<i32>()?
        + "3".parse::<i32>()?
};
assert_eq!(result, Ok(6));

let result: Result<i32, ParseIntError> = do catch {
    "1".parse::<i32>()?
        + "foo".parse::<i32>()?
        + "3".parse::<i32>()?
};
assert!(result.is_err());
#}