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.

Reply via email to