macro_rules! doc {
    (T, Option, Vec, $($t:tt)*) => { ... };
    (Option, Vec, $($t:tt)*) => { ... };
    (T, Option, $($t:tt)*) => { ... };
    (T, Vec, $($t:tt)*) => { ... };
    (T, $($t:tt)*) => { ... };
    (Option, $($t:tt)*) => { ... };
    (Vec, $($t:tt)*) => { ... };
    (@inner T, $i:ident :: $($t:tt)*) => { ... };
    (@inner Option, $i:ident :: $($t:tt)*) => { ... };
    (@inner Vec, $i:ident :: $($t:tt)*) => { ... };
    (@inner T, $i:ident $($t:tt)*) => { ... };
    (@inner Option, $i:ident $($t:tt)*) => { ... };
    (@inner Vec, $i:ident $($t:tt)*) => { ... };
    ($t:ty, $e:expr) => { ... };
    ($($t:tt)*) => { ... };
}