#[doc(hidden)] #[macro_export(local_inner_macros)] macro_rules! _overload_unary { (-, $($t:tt)+) => (_overload_unary_internal!(Neg, neg, $($t)+);); (!, $($t:tt)+) => (_overload_unary_internal!(Not, not, $($t)+);); } #[doc(hidden)] #[macro_export(local_inner_macros)] macro_rules! _overload_unary_internal { ($op_trait:ident, $op_fn:ident, $i:ident, $t:ty, $out:ty, $body:block) => ( impl ops::$op_trait for $t { type Output = $out; fn $op_fn(self) -> Self::Output { let $i = self; $body } } ); }