27 lines
662 B
Rust
27 lines
662 B
Rust
// Ensure if let guards can be used in constant expressions.
|
|
// build-pass
|
|
|
|
#![feature(if_let_guard)]
|
|
|
|
const fn match_if_let(x: Option<i32>, y: Option<i32>) -> i32 {
|
|
match x {
|
|
None if let Some(a @ 5) = y => a,
|
|
Some(z) if let (Some(_), 12) = (y, z) => 2,
|
|
_ => 3,
|
|
}
|
|
}
|
|
|
|
const ASSERTS: usize = {
|
|
assert!(match_if_let(None, Some(5)) == 5);
|
|
assert!(match_if_let(Some(12), Some(3)) == 2);
|
|
assert!(match_if_let(None, Some(4)) == 3);
|
|
assert!(match_if_let(Some(11), Some(3)) == 3);
|
|
assert!(match_if_let(Some(12), None) == 3);
|
|
assert!(match_if_let(None, None) == 3);
|
|
0
|
|
};
|
|
|
|
fn main() {
|
|
let _: [(); ASSERTS];
|
|
}
|