Dicebot on leaving D: It is anarchy driven development in all its glory.

Nicholas Wilson iamthewilsonator at hotmail.com
Sat Aug 25 08:19:56 UTC 2018


On Saturday, 25 August 2018 at 01:43:19 UTC, Walter Bright wrote:
> On 8/24/2018 4:22 PM, tide wrote:
>> struct SomeStruct
>> {
>>      void foo() {
>>          // use SomeStruct
>>      }
>> }
>> 
>> 
>> void broken()
>> {
>>      void function() foo = &SomeStruct.foo;
>>      foo(); // runtime error, isn't actually safe uses wrong 
>> calling convention as well
>> }
>> 
>> Not really lack of feature so much as there exists broken 
>> code. This has been valid code for god knows how long. At some 
>> point it was usable in @safe, but it looks you can't take an 
>> address of a member function without "this" as well in safe 
>> anymore.
>
>
> That's because it isn't safe. But being able to take the 
> address is important for system work.

The stupid thing is you _have_ to cast (which is unsafe) the 
return type to be correct.

This could be solvable with DIP1011 to make &SomeStruct.foo 
return `extern(delegate) void function(ref Foo)` although it 
makes no explicit mention other than "member functions be 
implicitly convertible to extern(delegate) functions".


More information about the Digitalmars-d mailing list