about summary refs log tree commit diff
path: root/tests/ui/structs/default-field-values/empty-struct.rs
diff options
context:
space:
mode:
authorEsteban Küber <esteban@kuber.com.ar>2025-01-18 21:04:52 +0000
committerEsteban Küber <esteban@kuber.com.ar>2025-01-18 21:05:09 +0000
commit27f079ae24175a60edae59afdc34099d80e898c7 (patch)
treecd2bc31c20a6268a729c9fc6a024d867909347fd /tests/ui/structs/default-field-values/empty-struct.rs
parentbcd0683e5dce1945b5d940714742e7502883bb5c (diff)
downloadrust-27f079ae24175a60edae59afdc34099d80e898c7.tar.gz
rust-27f079ae24175a60edae59afdc34099d80e898c7.zip
Disallow `A { .. }` if `A` has no fields
```
error: `A` has no fields, `..` needs at least one default field in the struct definition
  --> $DIR/empty-struct.rs:16:17
   |
LL |     let _ = A { .. };
   |             -   ^^
   |             |
   |             this type has no fields
```
Diffstat (limited to 'tests/ui/structs/default-field-values/empty-struct.rs')
-rw-r--r--tests/ui/structs/default-field-values/empty-struct.rs21
1 files changed, 21 insertions, 0 deletions
diff --git a/tests/ui/structs/default-field-values/empty-struct.rs b/tests/ui/structs/default-field-values/empty-struct.rs
new file mode 100644
index 00000000000..c9cb861ae27
--- /dev/null
+++ b/tests/ui/structs/default-field-values/empty-struct.rs
@@ -0,0 +1,21 @@
+#![feature(default_field_values)]
+
+// If an API wants users to always use `..` even if they specify all the fields, they should use a
+// sentinel field. As of now, that field can't be made private so it is only constructable with this
+// syntax, but this might change in the future.
+
+struct A {}
+struct B();
+struct C;
+struct D {
+    x: i32,
+}
+struct E(i32);
+
+fn main() {
+    let _ = A { .. }; //~ ERROR has no fields
+    let _ = B { .. }; //~ ERROR has no fields
+    let _ = C { .. }; //~ ERROR has no fields
+    let _ = D { x: 0, .. };
+    let _ = E { 0: 0, .. };
+}