Similar macros, different behaviour
⚓ Rust 📅 2025-05-22 👤 surdeus 👁️ 10Can someone please explain to me why (some of) the following macros behave differently?
macro_rules! maybe_skip {
($prim:ty, $text:literal) => {
maybe_skip!($prim);
};
(u64) => {
println!("Skipping u64");
};
($prim:ty) => {
println!("Not skipping {}", stringify!($prim));
};
}
macro_rules! maybe_skip_again {
($prim:ident, $text:literal) => {
maybe_skip_again!($prim);
};
(u64) => {
println!("Skipping u64");
};
($prim:ident) => {
println!("Not skipping {}", stringify!($prim));
};
}
macro_rules! maybe_skip_again_again {
($prim:ident, $text:literal) => {
maybe_skip_again_again!($prim);
};
(u64) => {
println!("Skipping u64");
};
($prim:ty) => {
println!("Not skipping {}", stringify!($prim));
};
}
fn main() {
maybe_skip!(u32, "bla");
maybe_skip!(u64, "bla");
maybe_skip_again!(u32, "bla");
maybe_skip_again!(u64, "bla");
maybe_skip_again_again!(u32, "bla");
maybe_skip_again_again!(u64, "bla");
}
Output is:
Not skipping u32
Not skipping u64
Not skipping u32
Skipping u64
Not skipping u32
Skipping u64
2 posts - 2 participants
🏷️ rust_feed