]> git.lizzy.rs Git - rust.git/blob - src/test/ui/const-generics/macro_rules-braces.rs
Permit standalone generic parameters as const generic arguments in macros
[rust.git] / src / test / ui / const-generics / macro_rules-braces.rs
1 // revisions: full min
2 #![cfg_attr(full, allow(incomplete_features))]
3 #![cfg_attr(full, feature(const_generics))]
4 #![cfg_attr(min, feature(min_const_generics))]
5
6 fn test<const N: usize>() {
7     struct Foo<const M: usize>;
8     macro_rules! foo {
9         ($x:expr) => {
10             [u8; $x] //[full]~ ERROR constant expression depends
11         }
12     }
13     macro_rules! bar {
14         ($x:expr) => {
15             [u8; { $x }] //[full]~ ERROR constant expression depends
16         }
17     }
18     macro_rules! baz {
19         ( $x:expr) => {
20             Foo<$x> //[full]~ ERROR constant expression depends
21         }
22     }
23     macro_rules! biz {
24         ($x:expr) => {
25             Foo<{ $x }> //[full]~ ERROR constant expression depends
26         };
27     }
28
29     let _: foo!(N);
30     let _: foo!({ N });
31     let _: foo!({{ N }}); //[min]~ ERROR generic parameters may not
32     let _: bar!(N);
33     let _: bar!({ N }); //[min]~ ERROR generic parameters may not
34     let _: baz!(N);
35     let _: baz!({ N });
36     let _: baz!({{ N }}); //[min]~ ERROR generic parameters may not
37     let _: biz!(N);
38     let _: biz!({ N }); //[min]~ ERROR generic parameters may not
39     let _: foo!(3);
40     let _: foo!({ 3 });
41     let _: foo!({{ 3 }});
42     let _: bar!(3);
43     let _: bar!({ 3 });
44     let _: baz!(3);
45     let _: baz!({ 3 });
46     let _: baz!({{ 3 }});
47     let _: biz!(3);
48     let _: biz!({ 3 });
49     let _: foo!(10 + 7);
50     let _: foo!({ 10 + 7 });
51     let _: foo!({{ 10 + 7 }});
52     let _: bar!(10 + 7);
53     let _: bar!({ 10 + 7 });
54     let _: baz!(10 + 7); //~ ERROR expressions must be enclosed in braces
55     let _: baz!({ 10 + 7 });
56     let _: baz!({{ 10 + 7 }});
57     let _: biz!(10 + 7);
58     let _: biz!({ 10 + 7 });
59 }
60
61 fn main() {
62     test::<3>();
63 }