inout delegate

Manu via Digitalmars-d digitalmars-d at puremagic.com
Sun Oct 2 19:47:09 PDT 2016


On 3 October 2016 at 02:37, Timon Gehr via Digitalmars-d
<digitalmars-d at puremagic.com> wrote:
> On 02.10.2016 13:27, Manu via Digitalmars-d wrote:
>>
>> And what's the logic behind this:
>>
>> class Test
>> {
>>   int f() { return 10; }
>>
>>   static assert(is(typeof(&typeof(this).f) == int function())); // huh?
>>
>>   static void t()
>>   {
>>     // as expected:
>>     f(); // error : need 'this' for 'f' of type 'int()'
>>
>>     // calling a method without a context pointer...
>>     auto x = &f;
>>     x(); // call the method with no context pointer, how is this okay?
>>
>>     pragma(msg, typeof(x)); // prints: int function()
>>   }
>> }
>>
>> If f() were supplied an argument, the function would receive the first
>> arg as the context pointer, and the rest would be out by 1! O_o
>> I don't see how this code can be acceptable?
>>
>> If such a thing (getting a static function pointer from a delegate)
>> were to be supported, surely: is(typeof(&Test.f) == int
>> function(Test)), though this is only valid for some (most) abi's.
>
>
> This is a known issue: https://issues.dlang.org/show_bug.cgi?id=3720
>
> (What I do is: typeof(&typeof(this).f) is int delegate(), but auto x = &f
> does not compile as the 'this' reference is missing.)

It compiles for me... (using yesterday's nightly)
I pasted it right from my code.


More information about the Digitalmars-d mailing list