]>
Commit | Line | Data |
---|---|---|
29967ef6 XL |
1 | // run-pass |
2 | ||
3 | #![feature(destructuring_assignment)] | |
4 | ||
5 | struct TupleStruct<S, T>(S, T); | |
6 | ||
7 | impl<S, T> TupleStruct<S, T> { | |
8 | fn assign(self, first: &mut S, second: &mut T) { | |
9 | // Test usage of `Self` instead of the struct name: | |
10 | Self(*first, *second) = self | |
11 | } | |
12 | } | |
13 | ||
14 | enum Enum<S, T> { | |
15 | SingleVariant(S, T) | |
16 | } | |
17 | ||
18 | type Alias<S> = Enum<S, isize>; | |
19 | ||
20 | fn main() { | |
21 | let (mut a, mut b); | |
22 | TupleStruct(a, b) = TupleStruct(0, 1); | |
23 | assert_eq!((a, b), (0, 1)); | |
24 | TupleStruct(a, .., b) = TupleStruct(1, 2); | |
25 | assert_eq!((a, b), (1, 2)); | |
fc512014 XL |
26 | TupleStruct(_, a) = TupleStruct(2, 2); |
27 | assert_eq!((a, b), (2, 2)); | |
29967ef6 | 28 | TupleStruct(..) = TupleStruct(3, 4); |
fc512014 | 29 | assert_eq!((a, b), (2, 2)); |
29967ef6 XL |
30 | TupleStruct(5,6).assign(&mut a, &mut b); |
31 | assert_eq!((a, b), (5, 6)); | |
32 | Enum::SingleVariant(a, b) = Enum::SingleVariant(7, 8); | |
33 | assert_eq!((a, b), (7, 8)); | |
34 | Alias::SingleVariant(a, b) = Alias::SingleVariant(9, 10); | |
35 | assert_eq!((a, b), (9, 10)); | |
36 | } |