Test mixed default and non-default

This commit is contained in:
Jonas Schievink 2019-09-15 22:07:01 +02:00
parent c8da9ee50a
commit 24ec364713
2 changed files with 57 additions and 0 deletions

View File

@ -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;
}

View File

@ -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`.