<html><body bgcolor="#FFFFFF"><div></div><div><span class="Apple-style-span" style="font-size: 15px; -webkit-tap-highlight-color: rgba(26, 26, 26, 0.296875); -webkit-composition-fill-color: rgba(175, 192, 227, 0.230469); -webkit-composition-frame-color: rgba(77, 128, 180, 0.230469); "><span>On digitalmars.D, I've seen a lot of confusion about how shared should/does work. I don't know of any formal documentation on this. Maybe that'd be a side goal for this list?</span><br><span></span><br><span>Certainly, shared is transitive just like const or immutable. Non-shared instances can't call shared functions and shared instances can only call shared functions.</span><br><span></span><br><span>I know of at least one exception to that: auto x = new shared(T)(); will call T's this() which is can not be marked as shared (bugzilla 3640). I'm not sure about other special functions. It also isn't possible to have both a shared and a non-shared version of template functions (bugzilla 3660). 3660 has stopped my use of shared dead in its tracks.</span><br><span></span><br><span>While I'm listing bugzilla stuff, 3642's awful error message seems relevent. When that message shows up more meaningful scenarios there are other more helpful error messages that are also printed.</span></span><br></div></body></html>