Can you refer to a named enum as if it were anonymous in D?

d, enums

Solution

If you would like type safety with anonymous enums, you can create a new distinct type using `typedef`, and use it as the base type of the anonymous enum. Example:

typedef int A;
enum : A
{
    a1,
    a2,
    a3
}

typedef int X;
enum : X
{
    x1,
    x2,
    x3
}

void main()
{
    A a;
    X x;
    x = a;  // Error: cannot implicitly convert expression (a) of type A to X
}

Problem

I'm doing a D bridge to a C library, and this has come up with the C code using typedef'd enums that it refers to like a constant, but can name it for function arguments and the like. Example: ``` enum someLongNameThatTheCLibraryUses { A, B, } ``` Currently, I must refer to it like so: ``` someLongNameThatTheCLibraryUses.A; ``` But I would rather: ``` A; ``` I could do this: ``` alias someLongNameThatTheCLibraryUses a; a.A; ``` But I don't want to do that in the library module, so I'd have to do it where it's used, which would be annoying. Is there a way to do this?

Original source