2020-11-07 05:37:28 -06:00
|
|
|
// run-pass
|
2021-08-27 11:04:57 -05:00
|
|
|
#![feature(generic_const_exprs)]
|
2020-11-07 05:37:28 -06:00
|
|
|
#![allow(incomplete_features)]
|
|
|
|
|
|
|
|
pub trait BlockCipher {
|
|
|
|
const BLOCK_SIZE: usize;
|
|
|
|
}
|
|
|
|
|
|
|
|
struct FooCipher;
|
|
|
|
impl BlockCipher for FooCipher {
|
|
|
|
const BLOCK_SIZE: usize = 64;
|
|
|
|
}
|
|
|
|
|
|
|
|
struct BarCipher;
|
|
|
|
impl BlockCipher for BarCipher {
|
|
|
|
const BLOCK_SIZE: usize = 32;
|
|
|
|
}
|
|
|
|
|
2022-07-25 15:36:03 -05:00
|
|
|
pub struct Block<C>(#[allow(unused_tuple_struct_fields)] C);
|
2020-11-07 05:37:28 -06:00
|
|
|
|
|
|
|
pub fn test<C: BlockCipher, const M: usize>()
|
|
|
|
where
|
|
|
|
[u8; M - C::BLOCK_SIZE]: Sized,
|
|
|
|
{
|
|
|
|
let _ = [0; M - C::BLOCK_SIZE];
|
|
|
|
}
|
|
|
|
|
|
|
|
fn main() {
|
|
|
|
test::<FooCipher, 128>();
|
|
|
|
test::<BarCipher, 64>();
|
|
|
|
}
|