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.