Is it possible to override the behavior of a type when used in a conditional expression?
Jonathan M Davis via Digitalmars-d-learn
digitalmars-d-learn at puremagic.com
Sat Sep 10 15:47:56 PDT 2016
On Saturday, September 10, 2016 14:29:33 pineapple via Digitalmars-d-learn
wrote:
> On Saturday, 10 September 2016 at 14:24:23 UTC, ag0aep6g wrote:
> > On 09/10/2016 04:10 PM, pineapple wrote:
> >> I've got a struct and it would be very convenient if I could
> >> specify
> >> what happens when I write `if(value)` - is this possible?
> >
> > `if (value)` implies a cast to bool. Define opCast!bool and it
> > gets called:
> >
> > ----
> > struct S
> > {
> >
> > bool opCast(T : bool)() { return true; }
> >
> > }
> > void main()
> > {
> >
> > S value;
> > import std.stdio: writeln;
> > if (value) writeln("yup");
> >
> > }
> > ----
>
> Huh, I could've sworn that some time ago I tried that and it
> didn't work. Was this a recent addition to the language?
No. That's how it's been for years now - certainly well before TDPL was
released - and I suspect that it was that way in D1 (though I've never
really used D1, so I'm not sure).
- Jonathan M Davis
More information about the Digitalmars-d-learn
mailing list