[Issue 24781] New: alias this on inner structs have wrong behaviour

d-bugmail at puremagic.com d-bugmail at puremagic.com
Mon Sep 23 16:51:31 UTC 2024


https://issues.dlang.org/show_bug.cgi?id=24781

          Issue ID: 24781
           Summary: alias this on inner structs have wrong behaviour
           Product: D
           Version: D2
          Hardware: All
                OS: All
            Status: NEW
          Severity: major
          Priority: P1
         Component: dmd
          Assignee: nobody at puremagic.com
          Reporter: contact at lsferreira.net

The following code:

struct Bar { @property bool isValid() { return true; } }
struct Club { @property bool isValid() { return false; } }

struct Foo
{
        Bar bar;
        alias bar this;

        Foobar foobar;

        struct Foobar
        {
                Club club;
                alias club this;

                bool humm() { return isValid(); }
        }

        static @property bool isValid() { assert(0); }
}

void main()
{
        Foo foo;
        imported!"std.stdio".writeln(foo.foobar.humm);
}

---

It is expected to print `false` but runs the `assert(0)`.
`--preview=fixAliasThis` fixes the behaviour, but this is very very error prone
and we found the bug at Weka that is not trivial to find.

I strongly suggest either making `--preview=fixAliasThis` the default and add
deprecation messages on the cases where its affected by the new behaviour, or
error these cases and ask to be explicit.

e.g.:
this should tell to use either `this.isValid` or `Foo.isValid`.

--


More information about the Digitalmars-d-bugs mailing list