| // run-pass |
| #![feature(generic_const_exprs)] |
| #![allow(incomplete_features)] |
| |
| const fn test_me<T>(a: usize, b: usize) -> usize { |
| if a < b { |
| std::mem::size_of::<T>() |
| } else { |
| usize::MAX |
| } |
| } |
| |
| fn test_simple<T>() -> [u8; std::mem::size_of::<T>()] |
| where |
| [u8; std::mem::size_of::<T>()]: Sized, |
| { |
| [0; std::mem::size_of::<T>()] |
| } |
| |
| fn test_with_args<T, const N: usize>() -> [u8; test_me::<T>(N, N + 1) + N] |
| where |
| [u8; test_me::<T>(N, N + 1) + N]: Sized, |
| { |
| [0; test_me::<T>(N, N + 1) + N] |
| } |
| |
| fn main() { |
| assert_eq!([0; 8], test_simple::<u64>()); |
| assert_eq!([0; 12], test_with_args::<u64, 4>()); |
| } |