// Test bindings-after-at with or-patterns and box-patterns //@ run-pass #![feature(box_patterns)] #[derive(Debug, PartialEq)] enum MatchArm { Arm(usize), Wild, } #[derive(Debug, PartialEq)] enum Test { Foo, Bar, Baz, Qux, } fn test(foo: Option>) -> MatchArm { match foo { ref bar @ Some(box Test::Foo | box Test::Bar) => { assert_eq!(bar, &foo); MatchArm::Arm(0) }, Some(ref bar @ box Test::Baz | ref bar @ box Test::Qux) => { assert!(**bar == Test::Baz || **bar == Test::Qux); MatchArm::Arm(1) }, _ => MatchArm::Wild, } } fn main() { assert_eq!(test(Some(Box::new(Test::Foo))), MatchArm::Arm(0)); assert_eq!(test(Some(Box::new(Test::Bar))), MatchArm::Arm(0)); assert_eq!(test(Some(Box::new(Test::Baz))), MatchArm::Arm(1)); assert_eq!(test(Some(Box::new(Test::Qux))), MatchArm::Arm(1)); assert_eq!(test(None), MatchArm::Wild); }