On Thursday, 3 March 2016 at 23:58:39 UTC, Yuxuan Shui wrote:
On Thursday, 3 March 2016 at 23:51:16 UTC, Adam D. Ruppe wrote:
On Thursday, 3 March 2016 at 23:46:50 UTC, Yuxuan Shui wrote:
Will typeid(a) is typeid(b) yield different results than typeid(a) == typeid(b)?

No. Indeed, opEquals on TypeInfo just calls is itself.

But opEquals also has extra comparison:

        auto ti = cast(const TypeInfo)o;
        return ti && this.toString() == ti.toString();

This makes me feel they are not the same.

Oh, I get it. 'a is b' works for the results of typeid(). But not for duplicates of TypeInfo.

For example:

        import std.stdio;
        A a, b;
        auto x = typeid(a), y = typeid(b);
        writeln(x is y);
auto xz = ((cast(ubyte *)x)[0..typeof(x).classinfo.init.length]).dup; //Evil
        auto z = cast(typeof(x))(cast(void *)xz);
        writeln(x is z); //false
        writeln(x == z); //true


Reply via email to