You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
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.
The text was updated successfully, but these errors were encountered:
> ref int get() const => n;
Sorry, you're right, ignore comment 1. That should be `ref const(int)`.
It's weird as the function prototype type is OK:
ref const(AliasSeq!(int)[0]) g() const;pragma(msg, typeof(g)); // const ref const(int)()
OK, making the prototype a template again shows the wrong return type:
ref const(AliasSeq!(int)[i]) get(size_t i)() const;pragma(msg, typeof(get!0)); // const ref int()
Paul Backus (@pbackus) reported this on 2024-11-20T16:34:07Z
Transferred from https://issues.dlang.org/show_bug.cgi?id=24869
CC List
Description
The text was updated successfully, but these errors were encountered: