30 lines
493 B
Rust
30 lines
493 B
Rust
//@ 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);
|
|
}
|