Is there a way to make __gshared part of an alias? 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); Global!float bar1; // <- still thread local