<br><br><div class="gmail_quote">On Fri, Jun 24, 2011 at 1:28 PM, Andrej Mitrovic <span dir="ltr"><<a href="mailto:andrej.mitrovich@gmail.com">andrej.mitrovich@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">

import std.stdio;<br>
<br>
void main()<br>
{<br>
    bool state = false;<br>
    writeln("state is: " ~ state ? "true" : "false");<br>
}<br>
<br>
writes:<br>
true<br>
<br>
Whoa, what happened? Well, this should explain things:<br>
<br>
    bool state = false;<br>
    auto str = "bla" ~ state;<br>
<br>
What (I assume) happens is the state boolean is converted to an int,<br>
and since chars are ints in disguise and interchangeable you can<br>
concatenate them with strings.<br>
<br>
So the original code acted like it was written like this:<br>
    bool state = false;<br>
    writeln(("state is: " ~ state) ? "true" : "false");<br>
<br>
And what we wanted was this:<br>
    bool state = false;<br>
    writeln("state is: " ~ (state ? "true" : "false"));<br>
<br>
Anyway I just wanted to share how forgetting parens can introduce bugs in code.<br>
</blockquote></div><br><div>Why can ints be so easily concatenated with strings in the first place?</div>