vlang / v

Simple, fast, safe, compiled language for developing maintainable software. Compiles itself in <1s with zero library dependencies. Supports automatic C => V translation. https://vlang.io
MIT License
35.76k stars 2.16k forks source link

referenced operator overloading do not work #15551

Open Delta456 opened 2 years ago

Delta456 commented 2 years ago

V version: Latest commit OS: WSL 2

What did you do?

struct Foo {
    f int
}

fn (f &Foo) + (f1 &Foo) &Foo {
    return &Foo{f:f.f+f1.f}
}
f := &Foo{2}
g := &Foo{3}
println(f + g)

What did you expect to see?

&Foo2{
   f: 5
}

What did you see instead?

main.v:10:9: error: invalid operator `+` to `&Foo` and `&Foo`
    8 | f := &Foo{2}
    9 | g := &Foo{3}
   10 | println(f + g)
      |         ~~~~~
   11 | 
   12 |
Delta456 commented 2 years ago

Same for referenced generic operator overloading

struct Foo<T> {
    f T
}

fn (f &Foo<T>) + (f1 &Foo<T>) &Foo<T> {
    return &Foo<T>{f:f.f+f1.f}
}
f := &Foo<int>{2}
g := &Foo<int>{3}
println(f + g)