On Saturday, April 27, 2013 06:19:29 Maxim Fomin wrote: > On Friday, 26 April 2013 at 21:34:44 UTC, Walter Bright wrote: > > On 4/26/2013 1:59 PM, Diggory wrote: > >> The actual value shouldn't be taken into > >> account when determining which overload to call, only the type > >> should matter, > > > > D has an interesting feature called VRP (value range > > propagation), where implicit conversion very much depends on > > > the value. For example: > Then perhaps ban VRP on arguments if it affects overloading?
No. The problem really isn't with VRP. The problem is the fact that D is weakly typed with regards to bool. In virtually all cases, having VRP do it's job is exactly what we want. It's just that in this one, weird things happen because of the implicit conversion to bool which is of zero utility in this case, because if that's what you wanted, you'd just use a boolean literal rather than an integer one. I really think that allowing the implicit conversion to bool is truly helpful in only a small number of cases (e.g. arithmetic which wants to add 0 or 1 depending on the result of a boolean expression), and it clearly results in behavior that most people don't expect in quite a few instances. The fact that stuff like auto b = false / true; compiles is just downright bizarre. - Jonathan M Davis