| //@ 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); |
| } |