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