Geez, I try to write some multithreaded code and I just keep hitting these:<div>--------<br><div><div>module test3;</div><div><br></div><div>struct SomeData {</div><div><span class="Apple-tab-span" style="white-space:pre">      </span>int i;</div>

<div><span class="Apple-tab-span" style="white-space:pre">      </span></div><div><span class="Apple-tab-span" style="white-space:pre">     </span>int iPlus2() {</div><div><span class="Apple-tab-span" style="white-space:pre">               </span>return i + 2;</div>

<div><span class="Apple-tab-span" style="white-space:pre">      </span>}</div><div>}</div><div><br></div><div>synchronized class Bob {</div><div>private:</div><div><span class="Apple-tab-span" style="white-space:pre">     </span>SomeData _dat;</div>

<div><span class="Apple-tab-span" style="white-space:pre">      </span></div><div>public:</div><div><span class="Apple-tab-span" style="white-space:pre">       </span>this() {</div><div><span class="Apple-tab-span" style="white-space:pre">             </span>_dat.i = 3;</div>

<div><span class="Apple-tab-span" style="white-space:pre">      </span>}</div><div><span class="Apple-tab-span" style="white-space:pre">    </span></div><div><span class="Apple-tab-span" style="white-space:pre">     </span>@property</div>

<div><span class="Apple-tab-span" style="white-space:pre">      </span>int i() {</div><div><span class="Apple-tab-span" style="white-space:pre">            </span>return _dat.iPlus2(); // <span style="background-color: transparent; ">test3.d(22): Error: function test3.SomeData.iPlus2 () is not callable using argu</span><span style="background-color: transparent; ">ment types () shared</span></div>

<div><span class="Apple-tab-span" style="white-space:pre">      </span>}</div><div>}</div></div><div>--------</div></div><div><br></div><div>This seems like it should be legal because SomeData is a value type. Accessing _dat.i directly is legal, and _dat can't possibly be shared. If I'm understanding things correctly, transitive shared shouldn't apply to value types like this, so the type of "this" when calling iPlus2 should just be SomeData.</div>