UFCS in the presence of alias this

Jens Mueller jens.k.mueller at gmx.de
Thu Apr 19 05:46:46 PDT 2012


kenji hara wrote:
> 2012年4月19日20:48 Jens Mueller <jens.k.mueller at gmx.de>:
> > Timon Gehr wrote:
> >> On 04/19/2012 11:28 AM, Jens Mueller wrote:
> >> >Hi,
> >> >
> >> >using UFCS with alias this behaves strange.
> >> >Consider
> >> >
> >> >struct Foo
> >> >{
> >> >     int _member;
> >> >     alias _member this;
> >> >}
> >> >
> >> >int foo(Foo f) { return f._member; }
> >> >int foo(int i) { return i; }
> >> >
> >> >unittest
> >> >{
> >> >     Foo f;
> >> >     f.foo(); // which function will be called? Isn't it ambiguous?
> >> >}
> >> >
> >> >Due to the alias this the function foo(int i) will be called. Is this
> >> >the indented behavior? Practically, I want UFCS to just perform a
> >> >syntactic rewrite from f.foo() to foo(f).
> >> >When using alias this you have to define the second function. Providing
> >> >only the first one results in a compile error. If you remove the alias
> >> >this things work as expected (first one needs to be defined).
> >> >
> >> >I stumbled upon this problem when trying to define additional functions
> >> >for a Tuple. Tuple has "alias field this" for falling back on
> >> >TypeTuple's opIndex. Unfortunately,
> >> >
> >> >alias Tuple!(int) Bar;
> >> >int bar(typeof(Bar.field) b) { return 1; }
> >> >
> >> >unittest
> >> >{
> >> >     Bar b;
> >> >     b.bar();
> >> >}
> >> >
> >> >does not work.
> >> >
> >> >Jens
> >>
> >> This is a bug. You can report it to:
> >> http://d.puremagic.com/issues/
> >
> > It's submitted.
> > http://d.puremagic.com/issues/show_bug.cgi?id=7943
> > Thanks for your reply.
> >
> > Jens
> 
> Posted compiler fix:
> https://github.com/D-Programming-Language/dmd/pull/890
> 
> Thanks for your reporting, Jens!

Fabulous. Thanks a lot.

Jens


More information about the Digitalmars-d mailing list