| //@ run-pass |
| |
| struct TupleStruct<S, T>(S, T); |
| |
| impl<S, T> TupleStruct<S, T> { |
| fn assign(self, first: &mut S, second: &mut T) { |
| // Test usage of `Self` instead of the struct name: |
| Self(*first, *second) = self |
| } |
| } |
| |
| enum Enum<S, T> { |
| SingleVariant(S, T) |
| } |
| |
| type Alias<S> = Enum<S, isize>; |
| |
| fn main() { |
| let (mut a, mut b); |
| TupleStruct(a, b) = TupleStruct(0, 1); |
| assert_eq!((a, b), (0, 1)); |
| TupleStruct(a, .., b) = TupleStruct(1, 2); |
| assert_eq!((a, b), (1, 2)); |
| TupleStruct(_, a) = TupleStruct(2, 2); |
| assert_eq!((a, b), (2, 2)); |
| TupleStruct(..) = TupleStruct(3, 4); |
| assert_eq!((a, b), (2, 2)); |
| TupleStruct(5,6).assign(&mut a, &mut b); |
| assert_eq!((a, b), (5, 6)); |
| Enum::SingleVariant(a, b) = Enum::SingleVariant(7, 8); |
| assert_eq!((a, b), (7, 8)); |
| Alias::SingleVariant(a, b) = Alias::SingleVariant(9, 10); |
| assert_eq!((a, b), (9, 10)); |
| } |