Types soup with enum and bool

John Colvin john.loughran.colvin at gmail.com
Tue Oct 29 11:17:48 PDT 2013


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)


More information about the Digitalmars-d-learn mailing list