#![feature(specialization)] // First, test only use of explicit `default` items: pub trait Foo { fn foo(&self) -> bool; } impl Foo for T { default fn foo(&self) -> bool { false } } impl Foo for i32 {} impl Foo for i64 { fn foo(&self) -> bool { true } } // Next, test mixture of explicit `default` and provided methods: pub trait Bar { fn bar(&self) -> i32 { 0 } } impl Bar for T { default fn bar(&self) -> i32 { 0 } } impl Bar for i32 { fn bar(&self) -> i32 { 1 } } impl<'a> Bar for &'a str {} impl Bar for Vec { default fn bar(&self) -> i32 { 2 } } impl Bar for Vec {} impl Bar for Vec { fn bar(&self) -> i32 { 3 } }