Closed
Description
Begin with the following working code: https://play.rust-lang.org/?version=stable&mode=debug&edition=2021&gist=fb4c4c5e78cd9c3f549cdd806e68388a
Then, delete the ,
before ..Default::default()
, resulting in:
#[derive(Default)]
struct Inner {
a: u8,
b: u8,
}
#[derive(Default)]
struct Outer {
inner: Inner,
defaulted: u8,
}
fn main(){
Outer {
inner: Inner {
a: 1,
b: 2,
}
..Default::default()
};
}
The current output is:
error[[E0308]](https://doc.rust-lang.org/stable/error-index.html#E0308): mismatched types
--> src/main.rs:15:16
|
15 | inner: Inner {
| ________________^
16 | | a: 1,
17 | | b: 2,
18 | | }
19 | | ..Default::default()
| |____________________________^ expected struct `Inner`, found struct `std::ops::Range`
|
= note: expected struct `Inner`
found struct `std::ops::Range<Inner>`
error[[E0063]](https://doc.rust-lang.org/stable/error-index.html#E0063): missing field `defaulted` in initializer of `Outer`
--> src/main.rs:14:5
|
14 | Outer {
| ^^^^^ missing `defaulted`
|
help: to set the remaining fields from `Default::default()`, separate the last named field with a comma
|
18 | },
| +
Some errors have detailed explanations: E0063, E0308.
For more information about an error, try `rustc --explain E0063`.
error: could not compile `playground` due to 2 previous errors```
Ideally the output should explain that struct update syntax requires a comma separating the last field from the ..
notation and point to that line.
Encountered in the wild in the Bevy community, although I run into this myself regularly when initializing structs by hand.