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