|  | #![feature(specialization)] | 
|  |  | 
|  | // First, test only use of explicit `default` items: | 
|  |  | 
|  | pub trait Foo { | 
|  | fn foo(&self) -> bool; | 
|  | } | 
|  |  | 
|  | impl<T> 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<T> 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<T> Bar for Vec<T> { | 
|  | default fn bar(&self) -> i32 { 2 } | 
|  | } | 
|  | impl Bar for Vec<i32> {} | 
|  | impl Bar for Vec<i64> { | 
|  | fn bar(&self) -> i32 { 3 } | 
|  | } |