2024-02-16 20:02:50 +00:00
|
|
|
//@ run-pass
|
2018-09-06 14:41:12 +02:00
|
|
|
|
2016-03-11 12:15:28 -08:00
|
|
|
// Test that non-method associated functions can be specialized
|
|
|
|
|
|
2020-05-17 10:22:48 +02:00
|
|
|
#![feature(specialization)] //~ WARN the feature `specialization` is incomplete
|
2015-12-30 15:25:31 -08:00
|
|
|
|
2015-12-28 15:40:11 -08:00
|
|
|
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);
|
|
|
|
|
}
|