| //@ dont-require-annotations: HELP | |
| #![feature(default_field_values)] | |
| #[derive(Debug)] | |
| pub struct S; | |
| #[derive(Debug, Default)] | |
| pub struct Foo { | |
| pub bar: S = S, | |
| pub baz: i32 = 42 + 3, | |
| } | |
| #[derive(Debug, Default)] | |
| pub struct Bar { | |
| pub bar: S, //~ ERROR the trait bound `S: Default` is not satisfied | |
| pub baz: i32 = 42 + 3, | |
| } | |
| #[derive(Default)] | |
| pub struct Qux<const C: i32> { | |
| bar: S = Self::S, | |
| baz: i32 = foo(), | |
| bat: i32 = <Qux<{ C }> as T>::K, | |
| bay: i32 = C, | |
| } | |
| pub struct Rak(i32 = 42); //~ ERROR default fields are not supported in tuple structs | |
| impl<const C: i32> Qux<C> { | |
| const S: S = S; | |
| } | |
| trait T { | |
| const K: i32; | |
| } | |
| impl<const C: i32> T for Qux<C> { | |
| const K: i32 = 2; | |
| } | |
| const fn foo() -> i32 { | |
| 42 | |
| } | |
| #[derive(Debug, Default)] | |
| enum E { | |
| #[default] | |
| Variant {} //~ ERROR the `#[default]` attribute may only be used on unit enum variants | |
| } | |
| union U | |
| { | |
| x: i32 = 1, //~ ERROR unions cannot have default field values | |
| y: f32 = 2., //~ ERROR unions cannot have default field values | |
| } | |
| fn main () { | |
| let _ = Foo { .. }; // ok | |
| let _ = Foo::default(); // ok | |
| let _ = Bar { .. }; //~ ERROR missing field | |
| let _ = Bar { baz: 0, .. }; //~ ERROR missing field | |
| let _ = Bar::default(); // silenced | |
| let _ = Bar { bar: S, .. }; // ok | |
| let _ = Qux::<4> { .. }; | |
| let _ = Rak(..); //~ ERROR E0308 | |
| //~^ HELP you might have meant to use `..` to skip providing | |
| let _ = Rak(0, ..); //~ ERROR E0061 | |
| //~^ HELP you might have meant to use `..` to skip providing | |
| let _ = Rak(.., 0); //~ ERROR E0061 | |
| //~^ HELP you might have meant to use `..` to skip providing | |
| let _ = Rak { .. }; // ok | |
| } |