__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