//@ run-pass #![allow(non_shorthand_field_patterns)] use std::mem; struct S { x: isize, y: isize, } type S2 = S; struct S3 { x: U, y: V } type S4 = S3; fn main() { let s = S2 { x: 1, y: 2, }; match s { S2 { x: x, y: y } => { assert_eq!(x, 1); assert_eq!(y, 2); } } // check that generics can be specified from the pattern let s = S4 { x: 4, y: 'a' }; match s { S4:: { x: x, y: y } => { assert_eq!(x, 4); assert_eq!(y, 'a'); assert_eq!(mem::size_of_val(&x), 1); } }; // check that generics can be specified from the constructor let s = S4:: { x: 5, y: 'b' }; match s { S4 { x: x, y: y } => { assert_eq!(x, 5); assert_eq!(y, 'b'); assert_eq!(mem::size_of_val(&x), 2); } }; }