On 17/11/23 2:48, Jonathan M Davis wrote:
On Thursday, November 16, 2023 6:04:43 PM MST Jonathan M Davis via
Digitalmars-d-learn wrote:

Actually, it looks like there's already an old bug report on the issue:

https://issues.dlang.org/show_bug.cgi?id=12363

So, it has been reported, but it looks it's one of those that's gone under
the radar.

- Jonathan M Davis


Thanks for finding it!

I think that in general D could do with a more systematic approach to reflection. For me, it's one of its greatest features, and it's a bit of a pity that it needs to be done in such an ad-hoc manner with all kind of corner cases.

I mean, in order to know if something is an `enum`, I need to do:

```d
enum isEnum(alias a) = is(typeof(a)) && !is(typeof(&a));
```

which feels like the wrong approach, and too much error-prone. I also fear I'm forgetting to consider some corner case.

There is `is(E == enum)`, but it only works on types, and fails for anonymous enums, because `typeof` returns the base type.

I know that `std.traits` was precisely supposed to hide these dirty details, but as of now it also seems to be missing this kind of systematic approach: I'd like things like `isEnum!symbol`, and also `isAlias!symbol`, etc.

But I think I digress a bit too much, this would be a topic rather for the general forum.

Thanks again for your help!

Reply via email to