// run-pass // A more complex example of numeric extensions pub trait TypeExt {} impl TypeExt for u8 {} impl TypeExt for u16 {} impl TypeExt for u32 {} impl TypeExt for u64 {} impl TypeExt for usize {} impl TypeExt for i8 {} impl TypeExt for i16 {} impl TypeExt for i32 {} impl TypeExt for i64 {} impl TypeExt for isize {} impl TypeExt for f32 {} impl TypeExt for f64 {} pub trait NumExt: TypeExt + PartialEq + PartialOrd {} impl NumExt for u8 {} impl NumExt for u16 {} impl NumExt for u32 {} impl NumExt for u64 {} impl NumExt for usize {} impl NumExt for i8 {} impl NumExt for i16 {} impl NumExt for i32 {} impl NumExt for i64 {} impl NumExt for isize {} impl NumExt for f32 {} impl NumExt for f64 {} pub trait UnSignedExt: NumExt {} impl UnSignedExt for u8 {} impl UnSignedExt for u16 {} impl UnSignedExt for u32 {} impl UnSignedExt for u64 {} impl UnSignedExt for usize {} pub trait SignedExt: NumExt {} impl SignedExt for i8 {} impl SignedExt for i16 {} impl SignedExt for i32 {} impl SignedExt for i64 {} impl SignedExt for isize {} impl SignedExt for f32 {} impl SignedExt for f64 {} pub trait IntegerExt: NumExt {} impl IntegerExt for u8 {} impl IntegerExt for u16 {} impl IntegerExt for u32 {} impl IntegerExt for u64 {} impl IntegerExt for usize {} impl IntegerExt for i8 {} impl IntegerExt for i16 {} impl IntegerExt for i32 {} impl IntegerExt for i64 {} impl IntegerExt for isize {} pub trait FloatExt: NumExt {} impl FloatExt for f32 {} impl FloatExt for f64 {} fn test_float_ext(n: T) { println!("{}", n < n) } pub fn main() { test_float_ext(1f32); }