Here's a sneaky little bug

Andrej Mitrovic andrej.mitrovich at gmail.com
Fri Jun 24 11:28:45 PDT 2011


import std.stdio;

void main()
{
    bool state = false;
    writeln("state is: " ~ state ? "true" : "false");
}

writes:
true

Whoa, what happened? Well, this should explain things:

    bool state = false;
    auto str = "bla" ~ state;

What (I assume) happens is the state boolean is converted to an int,
and since chars are ints in disguise and interchangeable you can
concatenate them with strings.

So the original code acted like it was written like this:
    bool state = false;
    writeln(("state is: " ~ state) ? "true" : "false");

And what we wanted was this:
    bool state = false;
    writeln("state is: " ~ (state ? "true" : "false"));

Anyway I just wanted to share how forgetting parens can introduce bugs in code.


More information about the Digitalmars-d mailing list