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