<div class="gmail_quote">On 21 April 2012 01:48, Jonathan M Davis <span dir="ltr"><<a href="mailto:jmdavisProg@gmx.com">jmdavisProg@gmx.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<div class="im">Please give code examples. I'm much more likely to understand what you mean</div>
that way.<br></blockquote><div><br></div><div>The code in question was in my OP, but that said...</div><div><br></div><div><br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<div class="im">static shouldn't have anything to do with TLS beyond the fact that it doesn't</div>
make any sense for a non-static member variable to be marked as shared or<br>
__gshared, since whether it's in TLS or not is determined whether the object<br>
that it's in is TLS or not.<br>
<br>
In the case of a struct or class, static merely states that there's only one<br>
instance per class/struct rather than it being a member variable, not anything<br>
about TLS. And if the documentation states that the static is implied for<br>
__gshared (I haven't read it recently), then that that just means that<br>
__gshared is always static so that you don't get the weird situation where you<br>
have a __gshared member variable (which would be meaningless as far as I can<br>
tell).<br></blockquote><div><br></div><div>Okay, I've just done some more tests taking what has been said here.</div><div>I realise I wasn't confused to begin with, I've been introducing confusion into my brain in order to attempt to understand why my test case was rejected.</div>
<div><br></div><div>I've simplified it, like so:</div><div><br></div><div><br></div><div><div>// member contained in a struct</div><div>struct Thing</div><div>{</div><div>    int x;</div><div>}</div><div><br></div><div>
Thing thing; // this is effectively identical to declaring 'int x;' globally, it's just wrapped in a thin struct</div><div><br></div><div>int x; // i'll also do it directly, to prove it works.</div><div><br>
</div><div>void main()</div><div>{</div><div>    // these 3 statements should be effectively identical</div><div>    thing.x = 0; // this works, obviously</div><div>    AliasTheStruct!( thing )(); // this works</div><div>
    AliasTheInt!( thing.x )();  // this doesn't</div><div><br></div><div>    AliasTheInt!( x )();        // of course, this works fine</div><div>}</div><div><br></div><div>void AliasTheStruct( alias x )()</div><div>{</div>
<div>    x.x = 10;</div><div>}</div><div><br></div><div>void AliasTheInt( alias x )()</div><div>{</div><div>    x = 10;</div><div>}</div></div><div><br></div><div><br></div><div>As far as I can tell, this should work. It doesn't. This was my bug report. Is this a legitimate bug?</div>
<div>This has hindered a lot of my code for days, cost me a lot of time, and I see no technical reason why it shouldn't work.</div><div><br></div><div>All the __gshared/static business was confusion that was seeded while trying to understand what Walter meant while rejecting my bug request.</div>
<div>I do clearly understand all that stuff after all ;) .. lets forget I brought that up, although I think the observation that it is rather confusing in the first place, and the fact the compiler silently ignores invalid attributes might be significant. There's probably some room for improvement there.</div>
</div>