32 lines
753 B
Rust
32 lines
753 B
Rust
|
// This is a regression test for issue #104400.
|
||
|
|
||
|
// revisions: unconstrained constrained
|
||
|
//[constrained] check-pass
|
||
|
|
||
|
// Test that we can constrain generic const items that appear inside associated consts by
|
||
|
// adding a (makeshift) "evaluatable"-bound to the item.
|
||
|
|
||
|
#![feature(generic_const_items, generic_const_exprs)]
|
||
|
#![allow(incomplete_features)]
|
||
|
|
||
|
trait Trait {
|
||
|
const LEN: usize;
|
||
|
|
||
|
#[cfg(unconstrained)]
|
||
|
const ARRAY: [i32; Self::LEN]; //[unconstrained]~ ERROR unconstrained generic constant
|
||
|
|
||
|
#[cfg(constrained)]
|
||
|
const ARRAY: [i32; Self::LEN]
|
||
|
where
|
||
|
[(); Self::LEN]:;
|
||
|
}
|
||
|
|
||
|
impl Trait for () {
|
||
|
const LEN: usize = 2;
|
||
|
const ARRAY: [i32; Self::LEN] = [360, 720];
|
||
|
}
|
||
|
|
||
|
fn main() {
|
||
|
let [_, _] = <() as Trait>::ARRAY;
|
||
|
}
|