Crate const_generic_wrap[−][src]
Simple wrapper for const generics.
Usage
Currently ‘the type of const parameters must not depend on other generic parameters’ (E0770).
ⓘ
struct A<N, const C : N>(N);
With this crate we can solve this by wrapping cosnt generic.
use const_generic_wrap::*; struct A<N, C>(N, C) where C : ConstWrap<BaseType = N>; // WrapU32 is ZST, so the size of A is as same as u32. assert_eq!(mem::size_of::<WrapU32<12>>(), 0); assert_eq!(mem::size_of::<A::<u32, WrapU32<12>>>(), mem::size_of::<u32>()); // you can selectively use const or non const struct B<N, C>(N, C) where C : ConstOrValue<N>; // or it can be C : Into<N> fn add_b<N, C>(v : B<N, C>) -> N where N : Add<Output = N>, C : ConstOrValue<N>{ v.0 + v.1.into() } let b_non_const = B(31, 11); let b_const = B(31, WrapI32::<11>); assert_eq!(add_b(b_non_const), add_b(b_const));
Structs
WrapBOOL | Const generic wrapper. |
WrapCHAR | Const generic wrapper. |
WrapI8 | Const generic wrapper. |
WrapI16 | Const generic wrapper. |
WrapI32 | Const generic wrapper. |
WrapI64 | Const generic wrapper. |
WrapISIZE | Const generic wrapper. |
WrapU8 | Const generic wrapper. |
WrapU16 | Const generic wrapper. |
WrapU32 | Const generic wrapper. |
WrapU64 | Const generic wrapper. |
WrapUSIZE | Const generic wrapper. |
Traits
ConstOrValue | Trait that can be a wrapped const generic or a owned value. |
ConstWrap | Marker that shows it wraps const generic. |