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