This is a compiler bug. To allow usage of AA functions from druntime, properties of built-in associative arrays are forwarded to the template instance AssociativeArray!(K, V). This is erroneously also done for .init and .stringof.
There are some bug reports for this.
http://d.puremagic.com/issues/show_bug.cgi?id=5683

If it were only init/stringof/mangleof this can be easily fixed.

On Thu, 28 Jul 2011 23:55:45 +0200, Jens Mueller <[email protected]> wrote:

Hi,

I'm trying to compare the type of associative arrays:

unittest {
    import std.stdio;

    double[string] aa;

    writeln(typeof(aa).stringof);
    writeln(typeof(aa.init).stringof);

    writeln(typeid(aa));
    writeln(typeid(aa.init));

    assert(is(typeof(aa) == typeof(aa.init)));
}

The assert fails which puzzles me. Why is the type of the expression aa
not the same as the type of the expression aa.init? There is a struct
AssociativeArray!(key, value) involved (part of druntime). The typeid
(i.e. the TypeInfo of the respective types of the expressions) are not
the same (double[immutable(char)[]] vs.
object.AssociativeArray!(string,double).AssociativeArray).

Jens


Reply via email to