1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
|
#![feature(type_changing_struct_update)]
#![allow(incomplete_features)]
struct Machine<'a, S, M> {
state: S,
message: M,
lt_str: &'a str,
common_field: i32,
}
struct State1;
struct State2;
struct Message1;
struct Message2;
fn update() {
let m1: Machine<State1, Message1> = Machine {
state: State1,
message: Message1,
lt_str: "hello",
common_field: 2,
};
// single type update
let m2: Machine<State2, Message1> = Machine {
state: State2,
..m1
};
// multiple type update
let m3: Machine<State2, Message2> = Machine {
state: State2,
message: Message2,
..m1
};
}
fn fail_update() {
let m1: Machine<f64, f64> = Machine {
state: 3.2,
message: 6.4,
lt_str: "hello",
common_field: 2,
};
// single type update fail
let m2: Machine<i32, f64> = Machine {
..m1
//~^ ERROR mismatched types [E0308]
};
// multiple type update fail
let m3 = Machine::<i32, i32> {
..m1
//~^ ERROR mismatched types [E0308]
};
}
fn main() {}
|