Issue 24857 - Unknown error while instantiating: __traits(compiles) hides the real issue
Summary: Unknown error while instantiating: __traits(compiles) hides the real issue
Status: NEW
Alias: None
Product: D
Classification: Unclassified
Component: dmd (show other issues)
Version: D2
Hardware: All All
: P1 normal
Assignee: No Owner
URL:
Keywords: accepts-invalid, ice-on-invalid-code, industry
Depends on:
Blocks:
 
Reported: 2024-11-13 12:03 UTC by ilya.yanok
Modified: 2024-11-13 17:19 UTC (History)
2 users (show)

See Also:


Attachments

Note You need to log in before you can comment on or make changes to this issue.
Description ilya.yanok 2024-11-13 12:03:09 UTC
dustmite minimized example (probably could be minimized a bit further):
```
template AllMembersInModule(alias Module) {
    import std: AliasSeq, Filter;
    alias all_members = AliasSeq!(__traits(allMembers, Module));

    template CanAccess(string member) {
        enum CanAccess = __traits(compiles, __traits(getMember, Module, member));
    }
    alias x = Filter!(CanAccess, all_members);

    alias AllMembersInModule = y;
}

template t() {
    alias MODULE = __traits(parent, {});
    static foreach (M; AllMembersInModule!MODULE) {
        }
}

alias AllMembers = AllMembersInModule!(__traits(parent, {}));
mixin t;
```

The issue here is a typo: `y` should be `x`, but we get an unknown error instead.

If I remove `alias AllMembers` it works as expected.

BTW, if I remove `mixin t` line, it compiles without error, is it expected, are aliases lazy?
Comment 1 Nick Treleaven 2024-11-13 16:34:33 UTC
I couldn't reduce it any more than this:

```
template AllMembersInModule(alias Module) {
    import std.meta : Filter;
    alias all_members = __traits(allMembers, Module);

    template CanAccess(string member) {
        enum CanAccess = __traits(compiles, __traits(getMember, Module, member));
    }
    alias x = Filter!(CanAccess, all_members);

    alias AllMembersInModule = y;
}

alias AllMembers = AllMembersInModule!(__traits(parent, {}));
pragma(msg, AllMembers); // added
```

Error: unknown, please file report on issues.dlang.org
aliastypo.d(15):        while evaluating `pragma(msg, AllMembers)`