Skip to content

Qualifier dropped from return type when AliasSeq is indexed with template argument #5579

Open
@dlangBugzillaToGithub

Description

@dlangBugzillaToGithub

Paul Backus reported this on 2024-11-20T16:34:07Z

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

CC List

  • Nick Treleaven

Description

As of DMD 2.109.1, the following program fails to compile:

---
alias AliasSeq(Args...) = Args;

struct S
{
    int n;
    ref const(AliasSeq!(int)[i]) get(size_t i)() const => n;
}

void main()
{
    const S s;
    s.get!0;
}
---

The error message is:

---
bug.d(6): Error: expression `this.n` of type `const(int)` is not implicitly convertible to return type `ref int`
bug.d(12): Error: template instance `bug.S.get!0LU` error instantiating
---

As show in the error message, the compiler has erroneously determined the return type of `get!0` to be `int`, when it should instead be `const(int)`.

The same error also occurs with the immutable, inout, and shared qualifiers.

Metadata

Metadata

Assignees

No one assigned

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions