Is it safe to use 'is' to compare types?
    Yuxuan Shui via Digitalmars-d-learn 
    digitalmars-d-learn at puremagic.com
       
    Thu Mar  3 16:22:20 PST 2016
    
    
  
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
    
    
More information about the Digitalmars-d-learn
mailing list