Is there a way to have additional template arguments in operator
overloads?
The problem I'm having is mostly caused by casting a templated
struct to other templated structs. I had the following code;
T opCast(T)() const if (is(T : Vec!(vecsize, S), S)) {
T converted;
static foreach (i; 0 .. vecsize)
converted.content[i] = cast(S) content[i];
return converted;
}
When I try to use this, I get the error 'undefined identifier S'.
Alternatively using:
T opCast(T, S)() . . .
causes the error 'template instance opCast!(Vec!(2, double)) does
not match template declaration opCast(T, S)()'
I found using 'alias S = typeof(content[0])' works as a kind of
ducttape alternative, however this seems like a codesmell to me,
and I fear it won't scale well either.
Am I missing a simple solution? And why is there no automatic
argument deduction in this scenario when compared to normal
function calls? (if the above opcast is translated to
'foo.opCast!T`)