// compile-fail #![feature(specialization)] // Test that attempting to override a non-default method or one not in the // parent impl causes an error trait Foo { fn foo(&self) -> bool { true } } // Specialization tree for Foo: // // Box Vec // / \ / \ // Box Box Vec<()> Vec impl Foo for Box { fn foo(&self) -> bool { false } } // Allowed impl Foo for Box {} // Can't override a non-`default` fn impl Foo for Box { fn foo(&self) -> bool { true } //~^ error: `foo` specializes an item from a parent `impl`, but that item is not marked `default` } // Doesn't mention the method = provided body is used and the method is final impl Foo for Vec {} // Allowed impl Foo for Vec<()> {} impl Foo for Vec { fn foo(&self) -> bool { true } //~^ error: `foo` specializes an item from a parent `impl`, but that item is not marked `default` } fn main() {}