37 lines
676 B
Rust
37 lines
676 B
Rust
// compile-flags: -Zmir-opt-level=3
|
|
// check-pass
|
|
|
|
#![feature(generic_const_exprs)]
|
|
//~^ WARN the feature `generic_const_exprs` is incomplete
|
|
|
|
#[inline(always)]
|
|
fn from_fn_1<const N: usize, F: FnMut(usize) -> f32>(mut f: F) -> [f32; N] {
|
|
let mut result = [0.0; N];
|
|
let mut i = 0;
|
|
while i < N {
|
|
result[i] = f(i);
|
|
i += 1;
|
|
}
|
|
result
|
|
}
|
|
|
|
pub struct TestArray<const N: usize>
|
|
where
|
|
[(); N / 2]:,
|
|
{
|
|
array: [f32; N / 2],
|
|
}
|
|
|
|
impl<const N: usize> TestArray<N>
|
|
where
|
|
[(); N / 2]:,
|
|
{
|
|
fn from_fn_2<F: FnMut(usize) -> f32>(f: F) -> Self {
|
|
Self { array: from_fn_1(f) }
|
|
}
|
|
}
|
|
|
|
fn main() {
|
|
TestArray::<4>::from_fn_2(|i| 0.0);
|
|
}
|