//@ run-pass | |
use std::marker::PhantomData; | |
fn main() { | |
let _arr = [1; <Multiply<Five, Five>>::VAL]; | |
} | |
trait TypeVal<T> { | |
const VAL: T; | |
} | |
struct Five; | |
impl TypeVal<usize> for Five { | |
const VAL: usize = 5; | |
} | |
struct Multiply<N, M> { | |
_n: PhantomData<N>, | |
_m: PhantomData<M>, | |
} | |
impl<N, M> TypeVal<usize> for Multiply<N, M> | |
where N: TypeVal<usize>, | |
M: TypeVal<usize>, | |
{ | |
const VAL: usize = N::VAL * M::VAL; | |
} |