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);
}