// run-pass #![feature(if_let_guard, let_chains)] fn check_if_let(opt: Option>>, value: i32) -> bool { if let Some(first) = opt && let Some(second) = first && let Some(third) = second && third == value { true } else { false } } fn check_let_guard(opt: Option>>, value: i32) -> bool { match opt { Some(first) if let Some(second) = first && let Some(third) = second && third == value => { true } _ => { false } } } fn check_while_let(opt: Option>>, value: i32) -> bool { while let Some(first) = opt && let Some(second) = first && let Some(third) = second && third == value { return true; } false } fn main() { assert_eq!(check_if_let(Some(Some(Some(1))), 1), true); assert_eq!(check_if_let(Some(Some(Some(1))), 9), false); assert_eq!(check_let_guard(Some(Some(Some(1))), 1), true); assert_eq!(check_let_guard(Some(Some(Some(1))), 9), false); assert_eq!(check_while_let(Some(Some(Some(1))), 1), true); assert_eq!(check_while_let(Some(Some(Some(1))), 9), false); }