Is alias equality inconsistent?

Jonathan M Davis jmdavisProg at gmx.com
Fri May 13 12:41:43 PDT 2011


On 2011-05-13 12:11, Jens Mueller wrote:
> Hi,
> 
> I find that comparing for alias equality is a bit odd. Maybe somebody
> can shed some light into it.
> 
> int a = 1;
> int b = 1;
> assert(a is b);
> 
> but
> 
> int[1] aFixedArray = [1];
> int[1] bFixedArray = [1];
> assert(aFixedArray !is bFixedArray);
> 
> It behaves as specified in TDPL p. 57:
> "If a and b are arrays or class references, the result is true if and
> only if a and b are two names for the same actual object;
> Otherwise, a is b is the same as a == b."
> 
> But fixed-size arrays have value semantics as int, float etc. So why is
> alias equality not consistent with value vs. reference semantics? Why
> this exception for fixed-size arrays?

I'm surprised that is works with value semantics at all. I would have expected 
that to be a compiler error. Barring that, I would have expected it to be 
false for value types unless a variable was compared with itself with is. This 
definitely seems off.

- Jonathan M Davis


More information about the Digitalmars-d mailing list