#[inline]
pub fn trd<T: Trd>(t: T) -> T::Ret {
t.trd()
}
pub trait Trd {
type Ret;
fn trd(self) -> Self::Ret;
}
macro_rules! impl_trd {
(
$( $t:tt ),+ ;$r:ty
) => {
impl < $($t),+ > Trd for ($($t),+) {
type Ret = $r;
fn trd(self) -> Self::Ret {
self.2
}
}
impl <'a, $($t),+ > Trd for &'a ($($t),+) {
type Ret = &'a $r;
fn trd(self) -> Self::Ret {
&self.2
}
}
};
}
impl_trd!(T0,T1, T2;T2);
impl_trd!(T0,T1, T2 , T3;T2);
impl_trd!(T0,T1, T2, T3, T4;T2);
impl_trd!(T0,T1, T2, T3, T4, T5;T2);
impl_trd!(T0,T1, T2, T3, T4, T5, T6;T2);
impl_trd!(T0,T1, T2, T3, T4, T5, T6, T7;T2);
impl_trd!(T0,T1, T2, T3, T4, T5, T6, T7, T8;T2);
impl_trd!(T0,T1, T2, T3, T4, T5, T6, T7, T8, T9;T2);
impl_trd!(T0,T1, T2, T3, T4, T5, T6, T7, T8, T9, T10;T2);
impl_trd!(T0,T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11;T2);
impl_trd!(T0,T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12;T2);
impl_trd!(T0,T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13;T2);
impl_trd!(T0,T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14;T2);
impl_trd!(T0,T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15;T2);
impl_trd!(T0,T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16;T2);