On Tuesday, 29 October 2013 at 17:40:23 UTC, Ali Çehreli wrote:
On 10/29/2013 09:15 AM, Maxim Fomin wrote:
> On Tuesday, 29 October 2013 at 12:43:17 UTC, bearophile wrote:
>> This code is accepted by the D compiler:
>>
>>
>> enum Foo { A, B, C }
>> void main() {
>> bool[5] bools;
>> auto b = bools[2] != Foo.C;
>> bools[2] = Foo.A;
>> }
>>
>>
>> Who is that likes such kind of code? What are the advantages
of
>> accepting such kind of code? I can see the disadvantages and
risks.
>>
>> Bye,
>> bearophile
>
> Probably may be related to even worse issue:
>
> import std.stdio;
>
> void foo(bool b) { writeln("bool"); }
> void foo(long l) { writeln("long"); }
>
> void main()
> {
> foo(0); // bool
> foo(1); // bool
> foo(2); // long
> int i = true;
> foo(i); // long
> }
>
> If reasons for accepting yours and this example are the same,
then this
> is by design (to be more precise, the part which is related
to bool
> types being essentially kind of integer types + VRP +
overloading rules).
There was a long discussion about that. Walter was happy that
bool was a integer type. Many of us had objections:
http://forum.dlang.org/thread/klc5r7$3c4$1...@digitalmars.com
Ali
Hey, just be happy that we're not in IDL, where even numbers
evaluate as false, odd numbers evaluate as true and 'not x'
evaluates to -(x+1)