about summary refs log tree commit diff
diff options
context:
space:
mode:
authorJonas Schievink <jonasschievink@gmail.com>2019-09-15 22:07:01 +0200
committerJonas Schievink <jonasschievink@gmail.com>2020-02-21 19:41:22 +0100
commit24ec364713daad4f5014a0921c3dbc1b59ade1ac (patch)
tree306c069316e5d330ed95a40a953728ce165b1a79
parentc8da9ee50af722385e673e79c466fb3abcb75697 (diff)
downloadrust-24ec364713daad4f5014a0921c3dbc1b59ade1ac.tar.gz
rust-24ec364713daad4f5014a0921c3dbc1b59ade1ac.zip
Test mixed default and non-default
-rw-r--r--src/test/ui/associated-types/defaults-mixed.rs36
-rw-r--r--src/test/ui/associated-types/defaults-mixed.stderr21
2 files changed, 57 insertions, 0 deletions
diff --git a/src/test/ui/associated-types/defaults-mixed.rs b/src/test/ui/associated-types/defaults-mixed.rs
new file mode 100644
index 00000000000..7601ab71e4a
--- /dev/null
+++ b/src/test/ui/associated-types/defaults-mixed.rs
@@ -0,0 +1,36 @@
+// compile-fail
+
+#![feature(associated_type_defaults)]
+
+// Tests that a trait with one defaulted and one non-defaulted assoc. type behaves properly.
+
+trait Trait {
+    type Foo = u8;
+    type Bar;
+}
+
+// `Bar` must be specified
+impl Trait for () {}
+//~^ error: not all trait items implemented, missing: `Bar`
+
+impl Trait for bool {
+//~^ error: not all trait items implemented, missing: `Bar`
+    type Foo = ();
+}
+
+impl Trait for u8 {
+    type Bar = ();
+}
+
+impl Trait for u16 {
+    type Foo = String;
+    type Bar = bool;
+}
+
+fn main() {
+    let _: <u8 as Trait>::Foo = 0u8;
+    let _: <u8 as Trait>::Bar = ();
+
+    let _: <u16 as Trait>::Foo = String::new();
+    let _: <u16 as Trait>::Bar = true;
+}
diff --git a/src/test/ui/associated-types/defaults-mixed.stderr b/src/test/ui/associated-types/defaults-mixed.stderr
new file mode 100644
index 00000000000..2d31d1dbdfe
--- /dev/null
+++ b/src/test/ui/associated-types/defaults-mixed.stderr
@@ -0,0 +1,21 @@
+error[E0046]: not all trait items implemented, missing: `Bar`
+  --> $DIR/defaults-mixed.rs:13:1
+   |
+LL |     type Bar;
+   |     --------- `Bar` from trait
+...
+LL | impl Trait for () {}
+   | ^^^^^^^^^^^^^^^^^ missing `Bar` in implementation
+
+error[E0046]: not all trait items implemented, missing: `Bar`
+  --> $DIR/defaults-mixed.rs:16:1
+   |
+LL |     type Bar;
+   |     --------- `Bar` from trait
+...
+LL | impl Trait for bool {
+   | ^^^^^^^^^^^^^^^^^^^ missing `Bar` in implementation
+
+error: aborting due to 2 previous errors
+
+For more information about this error, try `rustc --explain E0046`.