On Wednesday, 8 April 2020 at 19:22:11 UTC, jmh530 wrote:
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...

It works with `ref int` too.


```
__gshared int gshared = 42;

void foo(ref int i = gshared) @safe
{
    ++i;
}
void main()
{
    assert(gshared == 42);
    foo();
    assert(gshared == 43);
}
```

Reply via email to