| //@ run-pass | |
| //@ edition:2021 | |
| use Foo::*; | |
| #[allow(dead_code)] | |
| #[derive(Eq, PartialEq, Debug)] | |
| enum Foo { | |
| A(u64), | |
| B(u64), | |
| C, | |
| D, | |
| } | |
| macro_rules! foo { | |
| ($orpat:pat, $val:expr) => { | |
| match $val { | |
| x @ ($orpat) => x, // leading vert would not be allowed in $orpat | |
| _ => B(0xDEADBEEFu64), | |
| } | |
| }; | |
| } | |
| macro_rules! bar { | |
| ($orpat:pat, $val:expr) => { | |
| match $val { | |
| $orpat => 42, // leading vert allowed here | |
| _ => 0xDEADBEEFu64, | |
| } | |
| }; | |
| } | |
| fn main() { | |
| // Test or-pattern. | |
| let y = foo!(A(_)|B(_), A(32)); | |
| assert_eq!(y, A(32)); | |
| // Leading vert in or-pattern. | |
| let y = bar!(|C| D, C); | |
| assert_eq!(y, 42u64); | |
| } |