operator overloading and templates
Ali Çehreli
acehreli at yahoo.com
Tue Oct 4 09:54:29 PDT 2011
On Tue, 04 Oct 2011 16:24:52 +0000, jimmy wrote:
> Hi,
>
> I have the following code.
>
> struct Foo(int DIM) {
> Foo!(DIM) opBinary(string op) (Foo!(DIM) rhs)
> if (op == "+" || op == "-")
> {
> return Foo!(DIM)();
> }
> }
>
> unittest {
> auto u = Foo!(2)();
> auto v = Foo!(2)();
> assert(u + v == u);
> }
>
> I got the following during my test.
>
> Z:\proj\D\gas>rdmd --main -unittest a.d rdmd --main -unittest a.d
> a.d(12): Error: incompatible types for ((u) + (v)): 'Foo!(2)' and
> 'Foo!(2)'
> Failed: dmd -unittest -v -o- "a.d" -I"." >a.d.deps
>
> I have no idea why the incompatible types error occurred.
This doesn't answer the issue and the error message above is useless at
best, but here is a workaround:
Foo opBinary(string op) (Foo rhs)
if (op == "+" || op == "-")
{
writeln("My type: ", Foo.stringof);
return Foo();
}
Within the template definition, the name of the template alone means
"that particular instantiation of the template".
Ali
More information about the Digitalmars-d-learn
mailing list