[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