Is alias equality inconsistent?

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


On 2011-05-13 12:30, Timon Gehr 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?
> > 
> > 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.

Except that static arrays and dynamic arrays are different beasts and should 
_not_ be treated the same. A dynamic array which references a static array 
should be treated the same as another dynamic array, but static arrays and 
dynamic arrays should _not_ be treated the same. They're very different.

- Jonathan M Davis


More information about the Digitalmars-d mailing list