[Issue 6434] opDispatch must be considered before alias this.

d-bugmail at puremagic.com d-bugmail at puremagic.com
Tue Aug 16 03:55:36 PDT 2011


http://d.puremagic.com/issues/show_bug.cgi?id=6434



--- Comment #4 from Gor Gyolchanyan <gor at boloneum.com> 2011-08-16 03:55:33 PDT ---
I agree. This would make more sense. Let the opDispatch be used after alias
this.

(In reply to comment #2)
> I am not sure. opDispatch is meant to be a fallback mechanism used after all
> regular lookups fail. For example, one intended use of opDispatch is to
> dynamically handle calls to members unavailable statically. With "alias this"
> given the lowest priority, one would need to manually forward calls to
> inherited members:
> 
> struct A
> {
>    Variant i;
>    alias i this;
> 
>    auto opDispatch(string name, A...)(auto ref A args)
>    {
>        static if (isCallableOnI!(name, A)))
>            mixin("return i." ~ name ~ "(args);"); // this shouldn't be
> necessary
>        else
>            return dispatchDynamically(name, toVariants(args));                 
>    }
> }
> 
> So the bug is in opDispatch not being considered after "alias this" lookup
> fails, and not in the order of lookups.

I think all VISIBLE members should be used before opDispatch.

(In reply to comment #3)
> On the other hand, opDispatch considered first gives much more flexibility.
> Then, what to do with regular inheritance:
> 
> class A
> { 
>     int foo();
> }
> 
> class B : A
> {
>    void opDispatch(string name)()
>    {
>    }
> }
> 
> auto b = new B;
> b.foo();
> 
> Should foo be opDispatched?

-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------


More information about the Digitalmars-d-bugs mailing list