February 25, 2023 [Issue 23740] New: Alias breaks valid array operation code using operator overloading | ||||
---|---|---|---|---|
| ||||
https://issues.dlang.org/show_bug.cgi?id=23740 Issue ID: 23740 Summary: Alias breaks valid array operation code using operator overloading Product: D Version: D2 Hardware: x86_64 OS: Windows Status: NEW Severity: normal Priority: P1 Component: dmd Assignee: nobody@puremagic.com Reporter: HuskyNator@protonmail.ch When an alias introduces a potential array, it's picked over a valid overloaded operator when doing an array operation, causing a compilation error. (Note this issue reminds of issue #3064) When the alias is removed, this code compiles and functions properly: struct Vec{ int[2] list; alias list this; // Causes failing compilation (c[]*b has b cast to int[2]). Vec opBinary(string op)(const Vec rhs) const { Vec newA; mixin("newA.list[0] = list[0]"~op~"rhs.list[0];"); mixin("newA.list[1] = list[1]"~op~"rhs.list[1];"); return newA; } } void main(string[]) { Vec a; a.list = [1,1]; Vec b; b.list = [2,2]; Vec[2] c = [a, b]; Vec[2] d; d[] = c[] * b; writeln(d); } -- |
Copyright © 1999-2021 by the D Language Foundation