// Copyright 2015 The Rust Project Developers. See the COPYRIGHT // file at the top-level directory of this distribution and at // http://rust-lang.org/COPYRIGHT. // // Licensed under the Apache License, Version 2.0 or the MIT license // , at your // option. This file may not be copied, modified, or distributed // except according to those terms. // Parsing patterns with paths with type parameters (issue #22544) use std::default::Default; #[derive(Default)] pub struct Foo(T, T); impl Foo { fn foo(&self) { match *self { Foo::(ref x, ref y) => println!("Goodbye, World! {} {}", x, y) } } } trait Tr { type U; } impl Tr for Foo { type U = T; } struct Wrapper { value: T } fn main() { let Foo::(a, b) = Default::default(); let f = Foo(2,3); f.foo(); let w = Wrapper { value: Foo(10u8, 11u8) }; match w { Wrapper::> { value: Foo(10, 11) } => {}, ::Wrapper::< as Tr>::U> { value: Foo::(11, 16) } => { panic!() }, _ => { panic!() } } if let None:: = Some(8) { panic!(); } }