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

Reply via email to