| //@ run-pass | |
| // Test that non-method associated functions can be specialized | |
| #![feature(specialization)] //~ WARN the feature `specialization` is incomplete | |
| trait Foo { | |
| fn mk() -> Self; | |
| } | |
| impl<T: Default> Foo for T { | |
| default fn mk() -> T { | |
| T::default() | |
| } | |
| } | |
| impl Foo for Vec<u8> { | |
| fn mk() -> Vec<u8> { | |
| vec![0] | |
| } | |
| } | |
| fn main() { | |
| let v1: Vec<i32> = Foo::mk(); | |
| let v2: Vec<u8> = Foo::mk(); | |
| assert!(v1.len() == 0); | |
| assert!(v2.len() == 1); | |
| } |