I'm introspecting structs, and I ran into an issue where `__traits(derivedMembers)` includes manifest constant enums in the returned tuple.

What is the correct way to statically detect these? The immediate thing that springs to mind is `is(symbol == enum)`, but it's not it.

Currently I'm testing if a function that takes the address of the member compiles, and I think it works, but like with everything `__traits(compiles)` it strikes me as it might not be the right way to go about things.

```d
struct Foo
{
    int i;
    enum k = 42;
}

void main()
{
    foreach (memberstring; __traits(derivedMembers, Foo))
    {
static if (__traits(compiles, { Foo f; auto ptr = &__traits(getMember, f, memberstring); }))
        {
            // ...
        }
    }
}
```

What else can I try?

Reply via email to