about summary refs log tree commit diff
path: root/tests/ui/traits/const-traits/macro-bare-trait-objects-const-trait-bounds.rs
blob: 9b03ec7553d18ecae40dbadf648b06f6c101f83f (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
// 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() {}