pub struct B0; pub struct B1; use std::ops::Shl; use std::ops::Sub; pub type Shleft = >::Output; pub type Sub1 = >::Output; pub struct UInt { pub(crate) msb: U, pub(crate) lsb: B, } impl Shl> for UInt where UInt: Sub, UInt, B0>: Shl>>, { type Output = Shleft, B0>, Sub1>>; fn shl(self, rhs: UInt) -> Self::Output { unimplemented!() } }