opIs broke for structs?
Era Scarecrow
rtcvb32 at yahoo.com
Sat Oct 13 17:17:17 PDT 2012
On Saturday, 13 October 2012 at 22:19:44 UTC, H. S. Teoh wrote:
> Wait, there's such a thing as overloading 'is'? If there is,
> that's pretty messed up. The 'is' operator is used for a lot of
> fundamental stuff, and allowing structs and classes to change
> that just sounds ... wrong.
Sure there is, it's just not one you can override to my
knowledge (along with in (AA & array) I believe). I only referred
to it as opIs since that's likely how internally the compiler
deals with it, plus there's a reference to opIs in 2008.
On Saturday, 13 October 2012 at 22:42:35 UTC, bearophile wrote:
> "is" is meant to perform a bitwise comparison (I think today it
> is working as designed or it's very close to this target).
> So on class references "is" performs a bitwise comparison of
> the references themselves.
> On values (like structs) "is" compares the struct values
> bit-wise.
>
> In your code x1 and x2 contain the same bit patterns (32 bits
> set to zero), so "x1 is x2" is true.
TDPL pg. 57
[quote]
The expression a is b compares for alias equality and returns
true if a and be refer to the same actual object.
* If a and b are arrays or class references, the result is true
if and only if a and b are two named for the same actual object.
* Otherwise, a is b is the same as a == b
[/quote]
Hmm I had more the impression it was address space only. But if
it's in the manual and spec, then I'm wrong and just needed a
refresher on it. Course if structs are relocatable and are
identical, they are as good as the same object.
So *shrugs* Sorry for bringing it up then.
More information about the Digitalmars-d-learn
mailing list