On Thursday, 30 January 2014 at 15:59:28 UTC, Namespace wrote:
Here: http://dlang.org/operatoroverloading.html#FunctionCall
is this example:
----
import std.stdio;
struct F {
int opCall() {
return 0;
}
int opCall(int x, int y, int z) {
return x * y * z;
}
}
void main() {
F f;
int i;
i = f(); // same as i = f.opCall();
i = f(3,4,5); // same as i = f.opCall(3,4,5);
}
----
And it works of course. But what if I want to templatize
opCall? How can I call it?
----
import std.stdio;
struct F {
T opCall(T = int)(int a, int b, int c) {
return cast(T)(a * b * c);
}
}
void main() {
F f;
int i = f(3,4,5);
float f_ = f!float(6, 7, 8);
}
----
Does not work, it fails with:
Error: template instance f!float f is not a template
declaration, it is a variable
This is probably a bug. You should file it in Bugzilla.