On Thursday, 25 April 2013 at 21:05:43 UTC, Ali Çehreli wrote:
This question has first appeared on D.learn:

...

The program calls two separate foo() overloads for 1 and 2:

bool
long

According to the language spec, both overloads match the int argument by "implicit conversion" as described under "Function Overloading" here:

  http://dlang.org/function.html

Then, the overload must be resolved by partial ordering: "If two or more functions have the same match level, then partial ordering is used to try to find the best match. Partial ordering finds the most specialized function."

Is bool more specialized than long or is this a bug? Intuitively, both should match the 'long' overload. It feels like there should at least be ambiguity.

Ali

Looks like value range propagation bug because 1 is integer literal and should be converted to long. There is no way for 1 to be converted to bool here (from TDPL long is below int and it is the shortest way, value range propagation can work upwards, but the path would be longer).

Reply via email to