]> git.lizzy.rs Git - rust.git/blob - src/test/ui/const-generics/min_const_generics/complex-expression.rs
Add tests for `#[no_mangle]` in `impl` blocks that looks like generic `impl` blocks...
[rust.git] / src / test / ui / const-generics / min_const_generics / complex-expression.rs
1 use std::mem::size_of;
2
3 fn test<const N: usize>() {}
4
5 fn ok<const M: usize>() -> [u8; M] {
6     [0; { M }]
7 }
8
9 struct Break0<const N: usize>([u8; { N + 1 }]);
10 //~^ ERROR generic parameters may not be used in const operations
11
12 struct Break1<const N: usize>([u8; { { N } }]);
13 //~^ ERROR generic parameters may not be used in const operations
14
15 fn break2<const N: usize>() {
16     let _: [u8; N + 1];
17     //~^ ERROR generic parameters may not be used in const operations
18 }
19
20 fn break3<const N: usize>() {
21     let _ = [0; N + 1];
22     //~^ ERROR generic parameters may not be used in const operations
23 }
24
25 struct BreakTy0<T>(T, [u8; { size_of::<*mut T>() }]);
26 //~^ ERROR generic parameters may not be used in const operations
27
28 struct BreakTy1<T>(T, [u8; { { size_of::<*mut T>() } }]);
29 //~^ ERROR generic parameters may not be used in const operations
30
31 fn break_ty2<T>() {
32     let _: [u8; size_of::<*mut T>() + 1];
33     //~^ ERROR generic parameters may not be used in const operations
34 }
35
36 fn break_ty3<T>() {
37     let _ = [0; size_of::<*mut T>() + 1];
38     //~^ WARN cannot use constants which depend on generic parameters in types
39     //~| WARN this was previously accepted by the compiler but is being phased out
40 }
41
42
43 trait Foo {
44     const ASSOC: usize;
45 }
46
47 fn main() {}