[Issue 23740] New: Alias breaks valid array operation code using operator overloading
d-bugmail at puremagic.com
d-bugmail at puremagic.com
Sat Feb 25 17:33:38 UTC 2023
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 at puremagic.com
Reporter: HuskyNator at 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);
}
--
More information about the Digitalmars-d-bugs
mailing list