@safe function with __gshared as default parameter value
jmh530
john.michael.hall at gmail.com
Wed Apr 8 19:22:11 UTC 2020
On Wednesday, 8 April 2020 at 18:50:16 UTC, data pulverizer wrote:
> On Wednesday, 8 April 2020 at 16:53:05 UTC, Anonymouse wrote:
>> ```
>> import std.stdio;
>>
>> @safe:
>>
>> __gshared int gshared = 42;
>>
>> void foo(int i = gshared)
>> {
>> writeln(i);
>> }
>>
>> void main()
>> {
>> foo();
>> }
>> ```
>>
>> This currently works; `foo` is `@safe` and prints the value of
>> `gshared`. Changing the call in main to `foo(gshared)` errors.
>>
>> Should it work, and can I expect it to keep working?
>
> According to the manual it shouldn't work at all
> https://dlang.org/spec/function.html#function-safety where it
> says Safe Functions: "Cannot access __gshared variables.", I
> don't know why calling as `foo()` works.
You still wouldn't be able to manipulate gshared within the
function. Though it may still be a problem for @safe...
import std.stdio;
__gshared int gshared = 42;
@safe void foo(int i = gshared)
{
i++;
writeln(i);
}
void main()
{
writeln(gshared);
foo();
writeln(gshared);
gshared++;
writeln(gshared);
foo();
writeln(gshared);
}
More information about the Digitalmars-d-learn
mailing list