September 23 [Issue 24781] New: alias this on inner structs have wrong behaviour | ||||
---|---|---|---|---|
| ||||
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@puremagic.com Reporter: contact@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`. -- |
Copyright © 1999-2021 by the D Language Foundation