Am 28.04.2013 02:34, schrieb Jonathan M Davis:
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


Well, we need material to write "D the good parts" :)

Reply via email to