Closed
Description
While writing a macro thingy that generates match blocks, I had a problem where it was previously using an expr
type, but that didn't work[1], as it didn't accept the inline const
as an expr
, so I tried putting it as a pat
instead, but that didn't work[2] as pat
s aren't accepted in exprs, even if they would be valid in text form.
[1] The subject of this bug report:
macro_rules! doggo {
($v:expr) => {4};
}
fn main() {
doggo!(const { 2 });
}
Compile failure (the subject of this bug):
error: no rules expected the token `const`
--> src/main.rs:8:12
|
1 | macro_rules! doggo {
| ------------------ when calling this macro
...
8 | doggo!(const { 2 });
| ^^^^^ no rules expected this token in macro call
error: aborting due to previous error
error: could not compile `rusttest`
[2] The thing I tried, that I think is probably reasonable behaviour, although the error needs improvement:
#![feature(inline_const)]
macro_rules! doggo {
($v:pat) => {
$v
};
}
fn main() {
let v = doggo!(const { 2 });
}
Error:
error: expected expression, found `const{ 2 }`
--> src/main.rs:5:9
|
5 | $v
| ^^ expected expression
...
10 | let v = doggo!(const { 2 });
| ------------------- in this macro invocation
|
= note: this error originates in a macro (in Nightly builds, run with -Z macro-backtrace for more info)
Meta
rustc --version --verbose
:
rustc 1.53.0-nightly (d0695c908 2021-04-12)
binary: rustc
commit-hash: d0695c9081b16077d0aed368bccaf437d77ff497
commit-date: 2021-04-12
host: x86_64-unknown-linux-gnu
release: 1.53.0-nightly
LLVM version: 12.0.0