| //@ 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); |
| } |