On Friday, 6 May 2022 at 09:24:06 UTC, vit wrote:
> It look like examples at page https://dlang.org/spec/function.html#ref-return-scope-parameters are no longer relevant.
They were recently updated to match the implementation in 2.100.
> What difference are between return scope
, scope return
and return
?
return scope
means pointer members (such this.ptr
, C.ptr
) may not escape the function, unless they are returned. If you call test()
on a scope
variable, the return value will be a scope pointer.
scope return
on a struct member is scope
+ return ref
, meaning pointer members may not escape the function (the scope
part), but you can return a reference to the struct member itself (&this.val
, the return ref
part). If you call test()
on a local variable (scope
or not), the return value will be a scope pointer.
Just return
allows you to return a reference to the struct member itself (&this.val
), and also to escape pointer members (this.ptr
) since there is no scope
. However, that means you can't call test
on scope
variables.
> int* test() scope return{
return &this.val; // Error: returning `&this.val` escapes a reference to parameter `this`
}
}
I think you're using an older DMD version, the error should be gone in 2.100
> Why void* ptr in struct change effect of scope return ?
scope
is ignored when the struct has no pointers, and before 2.100, the meaning of return
+ scope
on ref
parameters was very inconsistent.