| //@ compile-flags: -Zdeduplicate-diagnostics=yes | |
| use std::mem::size_of; | |
| fn test<const N: usize>() {} | |
| fn ok<const M: usize>() -> [u8; M] { | |
| [0; { M }] | |
| } | |
| struct Break0<const N: usize>([u8; { N + 1 }]); | |
| //~^ ERROR generic parameters may not be used in const operations | |
| struct Break1<const N: usize>([u8; { { N } }]); | |
| //~^ ERROR generic parameters may not be used in const operations | |
| fn break2<const N: usize>() { | |
| let _: [u8; N + 1]; | |
| //~^ ERROR generic parameters may not be used in const operations | |
| } | |
| fn break3<const N: usize>() { | |
| let _ = [0; N + 1]; | |
| //~^ ERROR generic parameters may not be used in const operations | |
| } | |
| struct BreakTy0<T>(T, [u8; { size_of::<*mut T>() }]); | |
| //~^ ERROR generic parameters may not be used in const operations | |
| struct BreakTy1<T>(T, [u8; { { size_of::<*mut T>() } }]); | |
| //~^ ERROR generic parameters may not be used in const operations | |
| fn break_ty2<T>() { | |
| let _: [u8; size_of::<*mut T>() + 1]; | |
| //~^ ERROR generic parameters may not be used in const operations | |
| } | |
| fn break_ty3<T>() { | |
| let _ = [0; size_of::<*mut T>() + 1]; | |
| //~^ WARN cannot use constants which depend on generic parameters in types | |
| //~| WARN this was previously accepted by the compiler but is being phased out | |
| } | |
| trait Foo { | |
| const ASSOC: usize; | |
| } | |
| fn main() {} |