| // Ensure that we don't consider `const Trait` to match the macro fragment specifier `ty` |
| // as that would be a breaking change theoretically speaking. |
| // |
| // Syntactically trait object types can be "bare", i.e., lack the prefix `dyn`. |
| // By contrast, `?Trait` *does* match `ty` and therefore an arm like `?$Trait:path` |
| // would never be reached. See `parser/macro/macro-bare-trait-object-maybe-trait-bound.rs`. |
| |
| //@ check-pass (KEEP THIS AS A PASSING TEST!) |
| |
| macro_rules! check { |
| ($ty:ty) => { compile_error!("ty"); }; // KEEP THIS RULE FIRST AND AS IS! |
| |
| // DON'T MODIFY THE MATCHERS BELOW UNLESS THE CONST TRAIT MODIFIER SYNTAX CHANGES! |
| |
| (const $Trait:path) => { /* KEEP THIS EMPTY! */ }; |
| // We don't need to check `[const] Trait` here since that matches the `ty` fragment |
| // already anyway since `[` may begin a slice or array type. However, it'll then |
| // subsequently fail due to #146122 (section 3). |
| } |
| |
| check! { const Trait } |
| |
| fn main() {} |