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