On Mon, May 13, 2019 at 07:16:04AM -0400, Andrei Alexandrescu via Digitalmars-d-announce wrote: > On 5/12/19 11:46 PM, H. S. Teoh wrote: > > On Sun, May 12, 2019 at 01:20:16PM +0000, Mike Franklin via > > Digitalmars-d-announce wrote: > > [...] > > > If anyone's looking for a challenge, I welcome them to propose a > > > new `Bool` type (note the capital B) for inclusion in my new > > > library. > > [...] > > > > As long as && and || continue to evaluate to a 1-bit integer, all > > library efforts to implement Bool will be futile. > > When writing std.typecons.Ternary I thought of overloading opBinary > for | and & to take a lazy argument on the right. I forgot why I ended > up not doing it (I think it was because of code generation issues). > This is something that could be made to work.
The problem is that && and || cannot be overloaded (and for very good reasons -- it would open the door to C++-style egregious operator overload abuse), and the alternatives & and | have the wrong precedence, so you wouldn't be able to write boolean expressions with Bool naturally the way you could with the built-in bool type. It would not be a drop-in replacement and you would have to rewrite every single boolean expression to use Bool instead, and that with a high chance of introducing subtle errors because of the different precedence of & and |. Boolean expressions and the associated boolean type is one of the things that should be baked into the language (it'd be a mess otherwise), but that also means that if the language doesn't get it right you have no recourse. T -- Too many people have open minds but closed eyes.
