| //@ run-pass | |
| #![allow(non_shorthand_field_patterns)] | |
| use std::mem; | |
| struct S { | |
| x: isize, | |
| y: isize, | |
| } | |
| type S2 = S; | |
| struct S3<U,V> { | |
| x: U, | |
| y: V | |
| } | |
| type S4<U> = S3<U, char>; | |
| 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::<u8> { | |
| 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::<u16> { | |
| 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); | |
| } | |
| }; | |
| } |