__gshared as part of alias
Nicholas Wilson
iamthewilsonator at hotmail.com
Wed Jan 17 07:30:30 UTC 2018
On Wednesday, 17 January 2018 at 02:37:07 UTC, Steven
Schveighoffer wrote:
> On 1/11/18 11:25 PM, Nicholas Wilson wrote:
>> Is there a way to make __gshared part of an alias?
>
> No, __gshared is a storage class, not a type constructor, so it
> has no meaning as part of a type:
>
> __gshared int x;
> int y;
>
> static assert(is(typeof(x) == typeof(y)));
>
>> as in
>>
>> enum AddrSpace : uint
>> {
>> Private = 0,
>> Global = 1,
>> Shared = 2,
>> Constant = 3,
>> Generic = 4,
>> }
>>
>> struct Variable(AddrSpace as, T)
>> {
>> T val;
>> alias val this;
>> }
>> alias Global(T) = __gshared Variable!(AddrSpace.Global, T);
>
> dmd famously doesn't complain about attributes that do nothing,
> as in this case.
>
> -Steve
I kluged this into place in LDC
https://github.com/ldc-developers/ldc/pull/2509/commits/7cf6f417f95a5bffa4b18f2d8b132ca8f0e900d3#diff-33d7d08455db33f1182e3936fd2ba3f9R896
More information about the Digitalmars-d-learn
mailing list