]> git.lizzy.rs Git - rust.git/blob - src/test/ui/destructuring-assignment/tuple_struct_destructure_fail.rs
61ae42a51751f0b92d2be5504d83e5cf58e996bc
[rust.git] / src / test / ui / destructuring-assignment / tuple_struct_destructure_fail.rs
1 #![feature(destructuring_assignment)]
2
3 struct TupleStruct<S, T>(S, T);
4
5 enum Enum<S, T> {
6     SingleVariant(S, T)
7 }
8
9 type Alias<S> = Enum<S, isize>;
10
11 trait Test {
12     fn test() -> TupleStruct<isize, isize> {
13         TupleStruct(0, 0)
14     }
15 }
16
17 impl Test for Alias<isize> {}
18
19 fn test() -> TupleStruct<isize, isize> {
20     TupleStruct(0, 0)
21 }
22
23 fn main() {
24     let (mut a, mut b);
25     TupleStruct(a, .., b, ..) = TupleStruct(0, 1);
26     //~^ ERROR `..` can only be used once per tuple struct or variant pattern
27     Enum::SingleVariant(a, .., b, ..) = Enum::SingleVariant(0, 1);
28     //~^ ERROR `..` can only be used once per tuple struct or variant pattern
29
30     TupleStruct(a, a, b) = TupleStruct(1, 2);
31     //~^ ERROR this pattern has 3 fields, but the corresponding tuple struct has 2 fields
32     Enum::SingleVariant(a, a, b) = Enum::SingleVariant(1, 2);
33     //~^ ERROR this pattern has 3 fields, but the corresponding tuple variant has 2 fields
34
35     // Check if `test` is recognized as not a tuple struct but a function call:
36     test() = TupleStruct(0, 0);
37     //~^ ERROR invalid left-hand side of assignment
38     (test)() = TupleStruct(0, 0);
39     //~^ ERROR invalid left-hand side of assignment
40     <Alias::<isize> as Test>::test() = TupleStruct(0, 0);
41     //~^ ERROR invalid left-hand side of assignment
42 }