DMD 0.160 release

Kirk McDonald kirklin.mcdonald at gmail.com
Sun Jun 4 13:13:42 PDT 2006


Jarrett Billingsley wrote:
> "Jarrett Billingsley" <kb3ctd2 at yahoo.com> wrote in message 
> news:e5ved4$2bod$1 at digitaldaemon.com...
> 
> 
>>Operator overloading of "in"?  Cool, but I can't seem to get it to work; I 
>>don't know what argument and return types are allowed, as it's listed in 
>>the Operator Overloading specs but has no documentation.  I tried:
>>
>>class A
>>{
>>int* opIn(char[] name)
>>{
>> return null;
>>}
>>}
>>
>>void main()
>>{
>>A a = new A();
>>int* i = ("hi" in a);
>>}
>>
>>And all it said was that the rvalue of an InExpression must be an AA.  I 
>>tried a few different return types to no avail; I thought maybe it wanted 
>>a pointer type (as that's what in returns for AAs) but it obviously 
>>doesn't work.
> 
> 
> Oh dear.  I saw Kirk's post, and thought "oh no."  Sure enough, this works:
> 
> class A
> {
>  bool opIn(char[] name)
>  {
>   if(name == "hi")
>    return true;
>   else
>    return false;
>  }
> }
> 
> void main()
> {
>  A a = new A();
> 
>  writefln(a in "hi");
>  writefln(a in "bye");
> }
> 
> Notice that the expressions for 'in' are reversed.  It looks like I'm 
> checking to see if the object 'a' exists in the strings "hi" and "bye".
> 
> Bug #1... ;) 
> 
> 

The fix is simple: opIn is actually an opfunc_r without a corresponding 
opfunc (or a trailing "_r" in the name).

-Kirk McDonald



More information about the Digitalmars-d-announce mailing list