On 12/30/10 2:13 PM, Don wrote:
bearophile wrote:
Don:

No. People expect sqrt(2) to compile, and to return 1.414....

Then people probably need to use sqrt(2.0) or sqrt(cast(double)2).

I've got a lot of sympathy for the first alternative (absolutely NONE
for the second!). But unfortunately, the language allows sqrt(2) to
compile if there is only a single sqrt function.
We have here a feature which works in some cases, but not in others.

I agree there's an issue here, but not only with floating point numbers:

void fun(long);
void fun(ulong);
...
fun(2); // whaa?

The same problem is at work here: 2 is an int and is equally inclined to go to either long or ulong.

Generally I find it a bit difficult to integrate this proposal within the conversions framework that we have; it adds an entire new concept into the mix. This makes me be more conservative. For literals, all things considered, I don't think requiring the .0 is a major hindrance. For non-literals that's more of an issue:

int x = 42;
sqrt(x); // whaa?

I'm not sure to what extent this is a problem; I defer that opinion to Don. If this is indeed an important issue, we should address it. If not, I think improving the situation for literals exclusively would provide only marginal benefit.


Andrei

Reply via email to