macro_rules! impl_op {
($op:tt |$lhs_i:ident : &mut $lhs:ty, $rhs_i:ident : &$rhs:ty| $body:block) => { ... };
($op:tt |$lhs_i:ident : &mut $lhs:ty, $rhs_i:ident : $rhs:ty| $body:block) => { ... };
($op:tt |$lhs_i:ident : &$lhs:ty| -> $out:ty $body:block) => { ... };
($op:tt |$lhs_i:ident : &$lhs:ty, $rhs_i:ident : &$rhs:ty| -> $out:ty $body:block) => { ... };
($op:tt |$lhs_i:ident : &$lhs:ty, $rhs_i:ident : $rhs:ty| -> $out:ty $body:block) => { ... };
($op:tt |$lhs_i:ident : $lhs:ty| -> $out:ty $body:block) => { ... };
($op:tt |$lhs_i:ident : $lhs:ty, $rhs_i:ident : &$rhs:ty| -> $out:ty $body:block) => { ... };
($op:tt |$lhs_i:ident : $lhs:ty, $rhs_i:ident : $rhs:ty| -> $out:ty $body:block) => { ... };
}