Right now it seems like feature(adt_const_params)
is largely blocked on implementing valtrees
and const generics are constrained to integer-like types (including char
and bool
).
However, C-like enums are "integer like" and can have a specific integer repr
as well. It seems like supporting them with the current implementation of const generics might be especially simple, e.g.:
#[derive(Eq, PartialEq)]
#[repr(u8)]
pub enum Foo {
A = 1,
B = 2,
C = 3,
}
pub struct Bar<const FOO: Foo> {}
In fact, this works today:
pub struct Bar<const FOO: u8> {}
pub type Baz = Bar<{Foo::A as u8}>;
However the former fails with:
error: `Foo` is forbidden as the type of a const generic parameter
--> src/lib.rs:13:27
|
13 | pub struct Bar<const FOO: Foo> {}
| ^^^
|
= note: the only supported types are integers, `bool` and `char`