This works
macro_rules! m {
( a $(@$meta:ident)* ) => {
m! ( b $(@$meta)* );
};
( b @ meta ) => { "ok" };
( b ) => { "ok" };
}
fn main() {
println!("{}", m!(a @meta));
println!("{}", m!(a));
}
This doesn't
macro_rules! m {
( a $(@$meta:meta)* ) => { // NOTE change in here matcher type
m! ( b $(@$meta)* );
};
( b @ meta ) => { "ok" };
( b ) => { "ok" };
}
fn main() {
println!("{}", m!(a @meta));
println!("{}", m!(a));
}
error: no rules expected the token `meta`
--> src/main.rs:3:19
|
3 | m! ( b $(@$meta)* );
| ^^^^^
...
10 | println!("{}", m!(a @meta));
| ----------- in this macro invocation
Am I doing something wrong? Is the meta matcher useless?