24 lines
968 B
Rust
24 lines
968 B
Rust
// 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() {}
|