# `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());
    #}