| //@ run-pass | |
| trait SignedUnsigned { | |
| type Opposite; | |
| fn convert(self) -> Self::Opposite; | |
| } | |
| impl SignedUnsigned for isize { | |
| type Opposite = usize; | |
| fn convert(self) -> usize { | |
| self as usize | |
| } | |
| } | |
| impl SignedUnsigned for usize { | |
| type Opposite = isize; | |
| fn convert(self) -> isize { | |
| self as isize | |
| } | |
| } | |
| fn get(x: isize) -> <isize as SignedUnsigned>::Opposite { | |
| x.convert() | |
| } | |
| fn main() { | |
| let x = get(22); | |
| assert_eq!(22, x); | |
| } |