How to cast `shared` away reliably

Kagamin spam at here.lot
Thu Feb 12 14:59:19 UTC 2026


Example:
```d
shared class Unshareable(T)
{
	T value;
	T castToUnshared()
	{
		synchronized(this)
		{
			return cast(T)value;
		}
	}
	void castFromUnshared(T value2)
	{
		synchronized(this)
		{
			value=cast(shared)value2;
		}
	}
}

shared Unshareable!(int[][]) a;

unittest
{
	int[][] b=a.castToUnshared();
	a.castFromUnshared(b);
	shared int[][] b2=a.value; //shared
}
```


More information about the Digitalmars-d mailing list