enum Enum { SVariant { v: T }, UVariant } macro_rules! is_variant { (TSVariant, ) => (!); (SVariant, ) => (!); (UVariant, $expr:expr) => (is_variant!(@check UVariant, {}, $expr)); (@check $variant:ident, $matcher:tt, $expr:expr) => ( assert!(if let Enum::$variant::<()> $matcher = $expr () { true } else { false }, ); ); } fn main() { is_variant!(UVariant, Enum::<()>::UVariant); //~ ERROR expected function }