Skip to content

Unknown error while instantiating: __traits(compiles) hides the real issue #5576

Open
@dlangBugzillaToGithub

Description

@dlangBugzillaToGithub

ilya.yanok reported this on 2024-11-13T12:03:09Z

Transferred from https://issues.dlang.org/show_bug.cgi?id=24857

CC List

  • Luís Ferreira
  • Nick Treleaven

Description

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?

Metadata

Metadata

Assignees

No one assigned

    Labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions