1 // run-pass
2 #![allow(non_shorthand_field_patterns)]
3 
4 use std::mem;
5 
6 struct S {
7     x: isize,
8     y: isize,
9 }
10 
11 type S2 = S;
12 
13 struct S3<U,V> {
14     x: U,
15     y: V
16 }
17 
18 type S4<U> = S3<U, char>;
19 
main()20 fn main() {
21     let s = S2 {
22         x: 1,
23         y: 2,
24     };
25     match s {
26         S2 {
27             x: x,
28             y: y
29         } => {
30             assert_eq!(x, 1);
31             assert_eq!(y, 2);
32         }
33     }
34     // check that generics can be specified from the pattern
35     let s = S4 {
36         x: 4,
37         y: 'a'
38     };
39     match s {
40         S4::<u8> {
41             x: x,
42             y: y
43         } => {
44             assert_eq!(x, 4);
45             assert_eq!(y, 'a');
46             assert_eq!(mem::size_of_val(&x), 1);
47         }
48     };
49     // check that generics can be specified from the constructor
50     let s = S4::<u16> {
51         x: 5,
52         y: 'b'
53     };
54     match s {
55         S4 {
56             x: x,
57             y: y
58         } => {
59             assert_eq!(x, 5);
60             assert_eq!(y, 'b');
61             assert_eq!(mem::size_of_val(&x), 2);
62         }
63     };
64 }
65