struct Unshared(T) { private T value; this(T v) shared { opAssign(v); } T get() shared { return *cast(T*)&value; } alias get this; void opAssign(T v) shared { *cast(T*)&value=v; } } shared synchronized class A { private Unshared!(int[]) a; private Unshared!SysTime t; this(){ t=Clock.currTime; } int[] f() { return a; } }