3 // aux-build:specialization_cross_crate.rs
5 #![feature(specialization)] //~ WARN the feature `specialization` is incomplete
7 extern crate specialization_cross_crate;
9 use specialization_cross_crate::*;
14 struct MarkedAndClone;
15 impl MyMarker for MarkedAndClone {}
18 impl<T> Foo for MyType<T> {
19 default fn foo(&self) -> &'static str {
24 impl Foo for MyType<u8> {
25 fn foo(&self) -> &'static str {
31 impl Foo for MyOtherType {}
34 assert!(NotClone.foo() == "generic");
35 assert!(0u8.foo() == "generic Clone");
36 assert!(vec![NotClone].foo() == "generic");
37 assert!(vec![0u8].foo() == "generic Vec");
38 assert!(vec![0i32].foo() == "Vec<i32>");
39 assert!(0i32.foo() == "i32");
40 assert!(String::new().foo() == "String");
41 assert!(((), 0).foo() == "generic pair");
42 assert!(((), ()).foo() == "generic uniform pair");
43 assert!((0u8, 0u32).foo() == "(u8, u32)");
44 assert!((0u8, 0u8).foo() == "(u8, u8)");
45 assert!(MarkedAndClone.foo() == "generic Clone + MyMarker");
47 assert!(MyType(()).foo() == "generic MyType");
48 assert!(MyType(0u8).foo() == "MyType<u8>");
49 assert!(MyOtherType.foo() == "generic");