Ternary if and ~ does not work quite well

Ali Çehreli via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Mon Oct 12 11:55:18 PDT 2015


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



More information about the Digitalmars-d-learn mailing list