UFCS in the presence of alias this

kenji hara k.hara.pg at gmail.com
Thu Apr 19 05:14:50 PDT 2012


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!

Kenji Hara


More information about the Digitalmars-d mailing list