On Fri, Aug 6, 2010 at 22:37, div0 <div0@sourceforge.net> wrote:
Personally, I'm with you and I would expect that the compiler should
example the function parameters after the template string parameter but
it doesn't.
Yes :o(
You need to add a second template parameter for the function arguments and add a template constrait like so:
struct Group {
int i1;
Group opBinary(string op, U) (U x)
if(op == "+" && is(U: int))
{
// do somehting
return this;
}
Group opBinary(string op, U) (U rhs)
if(op == "+" && is(U: Group))
{
// do something
return this;
}
}
In some cases, you might factor things a bit:
Group opBinary(string op, U)(U u) if (op == "+")
{
common code for all U's;
static if (some test on U)
some code;
else
other code;
}
Maybe some code is common between the Group case and the int case. I'm not sure it's more readable this way...
Philippe