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