This needs to be fixed
Manu
turkeyman at gmail.com
Tue Aug 27 05:20:35 UTC 2024
On Mon, 26 Aug 2024 at 18:45, Timon Gehr via Digitalmars-d <
digitalmars-d at puremagic.com> wrote:
> On 8/26/24 07:21, Walter Bright wrote:
> > On 8/24/2024 9:36 AM, Manu wrote:
> >> alias x = s.tupleof; // this works
> >> alias y = s.tupleof[0]; // this is a compile error?!
> >
> >
> > Can you please repost with the missing declarations from your example?
> > Thanks!
>
> This suffices to reproduce:
>
> ```d
> struct S{ int x; }
> S s;
> alias x = s.tupleof; // this works
> alias y = s.tupleof[0]; // this is a compile error?!
> ```
>
> The underlying issue is that `.tupleof` has some magic that is not
> accessible to aliases.
>
> Consider:
>
> ```d
> struct S{ int x; }
> void main(){
> S s;
> alias x = s.tupleof;
> x[0] = 2; // ok
> alias y = s.x;
> y = 2; // error
> }
> ```
>
> So `x[0]` is an alias to the field of an instance.
>
> I think all of these examples should just work.
>
> When template parameters get involved however, local instantiation can
> get a bit tricky. So making it work without breakage probably also comes
> down to the issue that local instantiation works with only one context,
> which had a fix in DMD but was never ported to GDC and LDC, and was then
> reverted via deprecation in DMD as well. This is one of the most
> annoying and long-standing issues in D.
>
I endorse every word of this post.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.puremagic.com/pipermail/digitalmars-d/attachments/20240827/8f687f1e/attachment.htm>
More information about the Digitalmars-d
mailing list