enums and version/static if/"inheritance"
An Pham
home at home.com
Thu Aug 1 03:30:43 UTC 2024
On Wednesday, 31 July 2024 at 06:11:15 UTC, Walter Bright wrote:
> This comes up from time to time.
>
> ```
> enum FOO {
> A = 5,
> B = 6,
> version (x86_64) {
> C = 7,
> } else version (AArch64) {
> C = 17,
> } else {
> static assert(0);
> }
> version E = 9,
> }
> ```
>
> I've seen this forever in C. It just makes my brain bleed.
> Here's the D way:
>
> ```
> version (x86_64)
> {
> enum FOO
> {
> A = 5,
> B = 6,
> C = 7,
> }
> }
> else version (AArch64)
> {
> enum FOO
> {
> A = 5,
> B = 6,
> C = 17,
> }
> }
> else
> static assert(0);
> ```
>
The clean way is using "mixin" & "import"
foo_windows.enum file
enum FOO
{
A = 5,
B = 6,
C = 7,
}
foo_aarch64.enum file
enum FOO
{
A = 5,
B = 6,
C = 17,
}
main.d file
module m;
version(Windows)
mixin(import("foo_windows.enum"));
else version(AArch64)
mixin(import("foo_aarch64.enum"));
else
static assert(0);
version(Windows)
static assert(FOO.C == 7);
else version(AArch64)
static assert(FOO.C == 17);
void main()
{
}
build with dmd.exe -J="directory of those enum files..." main.d
More information about the Digitalmars-d
mailing list