// Copyright 2015 The Rust Project Developers. See the COPYRIGHT // file at the top-level directory of this distribution and at // http://rust-lang.org/COPYRIGHT. // // Licensed under the Apache License, Version 2.0 or the MIT license // , at your // option. This file may not be copied, modified, or distributed // except according to those terms. // run-pass // Test that non-method associated functions can be specialized #![feature(specialization)] trait Foo { fn mk() -> Self; } impl Foo for T { default fn mk() -> T { T::default() } } impl Foo for Vec { fn mk() -> Vec { vec![0] } } fn main() { let v1: Vec = Foo::mk(); let v2: Vec = Foo::mk(); assert!(v1.len() == 0); assert!(v2.len() == 1); }