Hello Lars,

If you are going to allow ordinary and templated functions to overload
against each other, there is a problem with IFTI that I think will
become more visible. It's something I run into all the time:

T sum(T)(T a, T b) { return a + b; }

real x = 2.0;

real y = sum(1.0, x);

The above doesn't compile, because 1.0 is a double literal, while x is
a real. However, if this was an ordinary function with T->real, it
would be valid code. I think it should also work with templates.

Ditto on this

Granted, I don't know how the matching procedure works now, but for
this case I picture it could be something like this:

Given:

T sum(T)(T a, T b, T c) { return a + b + c; }

sum(x, y, z);

then do the following:
1: Try T = typeof(x). If it works, use it.
2: Try T = typeof(y). If it works, use it.
3: Try T = typeof(z). If it works, use it.
4: Give template matching error.

Something about that rules set doesn't seem rigorous enough. I'm not sure what.


Reply via email to