2020-11-07 11:37:28 +00:00
|
|
|
//@ run-pass
|
2021-08-27 16:04:57 +00:00
|
|
|
#![feature(generic_const_exprs)]
|
2020-11-07 11:37:28 +00: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;
|
|
|
|
}
|
|
|
|
|
2024-07-30 16:29:20 +00:00
|
|
|
pub struct Block<C>(#[allow(dead_code)] C);
|
2020-11-07 11:37:28 +00: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>();
|
|
|
|
}
|