macro_rules! impl_for_refs {
( impl<$g:ident: $b:ident> $imp:ident for $t:ty { fn $method:ident() -> $u:ty } ) => {
impl<'a, $g: $b> $imp<$u> for &'a $t {
type Output = <$t as $imp<$u>>::Output;
fn $method(self, other: $u) -> <$t as $imp<$u>>::Output {
$imp::$method(*self, other)
}
}
impl<$g: $b> $imp<&$u> for $t {
type Output = <$t as $imp<$u>>::Output;
fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
$imp::$method(self, *other)
}
}
impl<$g: $b> $imp<&$u> for &$t {
type Output = <$t as $imp<$u>>::Output;
fn $method(self, other: &$u) -> <$t as $imp<$u>>::Output {
$imp::$method(*self, *other)
}
}
}
}