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