Is alias equality inconsistent?

Timon Gehr timon.gehr at gmx.ch
Fri May 13 12:30:10 PDT 2011


> 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?
>
> Jens

Hi,

I think it is more consistent this way, because static arrays are closer to
dynamic arrays than to int, float etc.
If you write generic code, it is more likely that the template will be
instantiated with for example both of int[6] and int[] than int[6] and float for
the same parameter.
You really want the semantics of 'is' to be consistent between different array types.

Timon


More information about the Digitalmars-d mailing list