]> git.lizzy.rs Git - rust.git/commitdiff
Test mixed default and non-default
authorJonas Schievink <jonasschievink@gmail.com>
Sun, 15 Sep 2019 20:07:01 +0000 (22:07 +0200)
committerJonas Schievink <jonasschievink@gmail.com>
Fri, 21 Feb 2020 18:41:22 +0000 (19:41 +0100)
src/test/ui/associated-types/defaults-mixed.rs [new file with mode: 0644]
src/test/ui/associated-types/defaults-mixed.stderr [new file with mode: 0644]

diff --git a/src/test/ui/associated-types/defaults-mixed.rs b/src/test/ui/associated-types/defaults-mixed.rs
new file mode 100644 (file)
index 0000000..7601ab7
--- /dev/null
@@ -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 (file)
index 0000000..2d31d1d
--- /dev/null
@@ -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`.