On Monday, 1 October 2018 at 02:29:40 UTC, Manu wrote: > I feel like I don't understand the design... > mutable -> shared should work the same as mutable -> const... > because > surely that's safe? > Nope. Consider. struct A { A* a; } void foo(shared A* a) { a.a = new shared(A))(); } Now you have effectively made a.a accessible as a mutable when it is shared.