| //@ check-pass | |
| // This used to be unsupported since the parser first tries to check if we have | |
| // any nested items, and then checks for statements (and expressions). The heuristic | |
| // that we were using to detect the beginning of a const item was incorrect, so | |
| // this used to fail. | |
| macro_rules! m { | |
| ($b:block) => { | |
| fn foo() { | |
| const $b | |
| } | |
| } | |
| } | |
| // This has worked since inline-consts were implemented, since the position that | |
| // the const block is located at doesn't support nested items (e.g. because | |
| // `let x = const X: u32 = 1;` is invalid), so there's no ambiguity parsing the | |
| // inline const. | |
| macro_rules! m2 { | |
| ($b:block) => { | |
| fn foo2() { | |
| let _ = const $b; | |
| } | |
| } | |
| } | |
| m!({}); | |
| m2!({}); | |
| fn main() {} |