On 10/12/2015 08:39 AM, TheFlyingFiddle wrote:
On Monday, 12 October 2015 at 05:19:40 UTC, Andre wrote:
Hi,
    writeln("foo "~ true ? "bar" : "baz");
André

"foo" ~ true

How does this compile? All i can see is a user trying to append a
boolean to a string which is obvously a type error. Or are they
converted to ints and then ~ would be a complement operator? In that
case.. horror.

Yes, horror and the mandatory link: :)

  http://dlang.org/type.html#integer-promotions

That is why most C++ guidelines (used to) recommend against defining 'operator bool()' for user types because then objects of that type take part in expressions as integers. The common recommendation in C++ used to be to define 'operator void*()' instead, which is not integral but if I remember correctly, it had its own share of issues. (Sorry, can't find a reference for that at the moment.)

C++11 made it possible to define 'operator bool()' as 'explicit' to prevent implicit conversion bugs.

Ali

Reply via email to