// run-pass trait Trait { fn uwu(&self) -> u8 { N } } impl Trait for u32 {} impl Trait<12> for u64 { fn uwu(&self) -> u8 { *self as u8 } } fn foo(arg: &dyn Trait) -> u8 { arg.uwu() } trait Traitor { fn owo(&self) -> u8 { M } } impl Traitor<2> for bool { } impl Traitor for u8 { fn owo(&self) -> u8 { *self } } fn bar(arg: &dyn Traitor) -> u8 { arg.owo() } fn main() { assert_eq!(foo(&10_u32), 12); assert_eq!(foo(&3_u64), 3); assert_eq!(bar(&true), 2); assert_eq!(bar(&1_u8), 1); }