Skip to content

Commit c375244

Browse files
committed
Add test for default_field_values and const_default
Add a test showing `#![feature(default_field_values)]` using `#[const_trait] trait Default` (`#![feature(const_default)]` + `#![feature(const_trait_impl)]`).
1 parent bf5e6cc commit c375244

File tree

1 file changed

+37
-0
lines changed

1 file changed

+37
-0
lines changed
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
//@ check-pass
2+
3+
// Ensure that `default_field_values` and `const_default` interact properly.
4+
5+
#![feature(const_default)]
6+
#![feature(const_trait_impl)]
7+
#![feature(default_field_values)]
8+
#![feature(derive_const)]
9+
10+
#[derive(PartialEq, Eq, Debug)]
11+
#[derive_const(Default)]
12+
struct S {
13+
r: Option<String> = <Option<_> as Default>::default(),
14+
s: String = String::default(),
15+
o: Option<String> = Option::<String>::default(),
16+
p: std::marker::PhantomData<()> = std::marker::PhantomData::default(),
17+
q: Option<String> = <Option<String> as Default>::default(),
18+
t: Option<String> = Option::default(),
19+
v: Option<String> = const { Option::default() },
20+
}
21+
22+
const _: S = S { .. };
23+
const _: S = const { S { .. } };
24+
const _: S = S::default();
25+
const _: S = const { S::default() };
26+
27+
fn main() {
28+
let s = S { .. };
29+
assert_eq!(s.r, None);
30+
assert_eq!(&s.s, "");
31+
assert_eq!(s.o, None);
32+
assert_eq!(s.p, std::marker::PhantomData);
33+
assert_eq!(s.q, None);
34+
assert_eq!(s.t, None);
35+
assert_eq!(s.v, None);
36+
assert_eq!(s, S::default());
37+
}

0 commit comments

Comments
 (0)