| //@ run-pass | |
| use std::fmt::Debug; | |
| trait MyTrait { | |
| fn get(&self) -> Self; | |
| } | |
| impl<T> MyTrait for T | |
| where T : Default | |
| { | |
| fn get(&self) -> T { | |
| Default::default() | |
| } | |
| } | |
| #[derive(Clone, Copy, Debug, PartialEq)] | |
| struct MyType { | |
| dummy: usize | |
| } | |
| impl MyTrait for MyType { | |
| fn get(&self) -> MyType { (*self).clone() } | |
| } | |
| fn test_eq<M>(m: M, n: M) | |
| where M : MyTrait + Debug + PartialEq | |
| { | |
| assert_eq!(m.get(), n); | |
| } | |
| pub fn main() { | |
| test_eq(0_usize, 0_usize); | |
| let value = MyType { dummy: 256 + 22 }; | |
| test_eq(value, value); | |
| } |