Compile-Time Size Checking of Enum Members of std.bitmanip.bitfields
"Nordlöw" via Digitalmars-d-learn
digitalmars-d-learn at puremagic.com
Mon Jan 19 01:42:31 PST 2015
The following code example
import std.stdio, std.bitmanip;
enum E2 { a, b, c, d, e }
immutable bf = bitfields!(uint, "x", 6,
E2, "e2", 2);
struct A { mixin(bf); }
void main(string[] args)
{
A obj;
obj.x = 2;
obj.e2 = E2.a;
import core.exception: AssertError;
try
{
obj.e2 = E2.e;
assert(false, "Exception not caught");
}
catch (core.exception.AssertError e) { /* ok to throw */ }
}
shows how brilliantly generic D is with regards to the
std.bitmanip.bitfields
However, wouldn't it be better to detect the mismatches between
enum bit-sizes and bitfield lengths at compile-time instead of at
run-time?
This is possible because all size information is available at
compile-time as template parameters to bitfields.
More information about the Digitalmars-d-learn
mailing list