Feature to get or add value to an associative array.

Uknown sireeshkodali1 at gmail.com
Fri Apr 20 14:34:48 UTC 2018


On Friday, 20 April 2018 at 14:02:17 UTC, Steven Schveighoffer 
wrote:
> On 4/20/18 4:24 AM, Nick Treleaven wrote:
>> On Wednesday, 18 April 2018 at 16:47:50 UTC, ag0aep6g wrote:
>>> You can get a pointer from the ref return:
>>>
>>>     Value* p = &aa.slot("key", { inserted = true; return 
>>> Value.init; });
>> 
>> This is not @safe, even with -dip1000:
>> 
>> Error: cannot take address of ref return of f() in @safe 
>> function main
>
> Hm... I would have expected it to work in dip1000.
>
> Hard for me to understand what dip1000 is doing, but it seems 
> like an omission:
>
> @safe ref int foo(return ref int x) { return x; }
>
> void main() @safe
> {
>    int x;
>    scope int *xp = &x; // OK with dip1000
>    xp = foo(x); // Error, even though it's exactly the same
> }
>
> And in this case, it doesn't even need to be scope, as it's GC 
> data. How does one communicate that the ref return is of GC 
> data and can be escaped as much as you want?
>
> -Steve

The error seems to be about type mismatching, it works if you use 
auto. I don't see how you could convert the `ref int` to `int *`
https://run.dlang.io/is/eIJMIK


More information about the Digitalmars-d mailing list