mod m { pub const P: usize = 0; } const Q: usize = 0; fn test() { struct Foo; macro_rules! foo { ($x:expr) => { [u8; $x] } } macro_rules! bar { ($x:expr) => { [u8; { $x }] } } macro_rules! baz { ( $x:expr) => { Foo<$x> } } macro_rules! biz { ($x:expr) => { Foo<{ $x }> }; } let _: foo!(N); let _: foo!({ N }); let _: foo!({{ N }}); //~ ERROR generic parameters may not let _: foo!(Q); let _: foo!(m::P); let _: bar!(N); let _: bar!({ N }); //~ ERROR generic parameters may not let _: bar!(Q); let _: bar!(m::P); let _: baz!(N); let _: baz!({ N }); let _: baz!({{ N }}); //~ ERROR generic parameters may not let _: baz!(Q); let _: baz!({ m::P }); let _: baz!(m::P); //~ ERROR expressions must be enclosed in braces let _: biz!(N); let _: biz!({ N }); //~ ERROR generic parameters may not let _: biz!(Q); let _: biz!(m::P); let _: foo!(3); let _: foo!({ 3 }); let _: foo!({{ 3 }}); let _: bar!(3); let _: bar!({ 3 }); let _: baz!(3); let _: baz!({ 3 }); let _: baz!({{ 3 }}); let _: biz!(3); let _: biz!({ 3 }); let _: foo!(10 + 7); let _: foo!({ 10 + 7 }); let _: foo!({{ 10 + 7 }}); let _: bar!(10 + 7); let _: bar!({ 10 + 7 }); let _: baz!(10 + 7); //~ ERROR expressions must be enclosed in braces let _: baz!({ 10 + 7 }); let _: baz!({{ 10 + 7 }}); let _: biz!(10 + 7); let _: biz!({ 10 + 7 }); } fn main() { test::<3>(); }