On 9/27/18 10:20 AM, Steven Schveighoffer wrote:
typeid sometimes gives you a more derived type than TypeInfo. Including for classes and structs.

In the past, .classinfo gave you a different thing than typeid(obj), but now it is the same thing:


     auto obj = new Object;
     // classinfo and typeid are the same object
     assert(obj.classinfo is typeid(obj));
     // and the same type
     static assert(is(typeof(obj.classinfo) == typeof(typeid(obj))));

I wouldn't use classinfo any more, I generally use typeid.

I should add that typeid does give you the derived TypeInfo_Class, not the concrete one.

that is:

Object obj; // = null

//typeid(obj); // segfault, can't dereference null pointer

class C {}

obj = new C;

static assert(is(typeof(obj) == Object));

writeln(typeid(obj)); // C, not Object

So it really is a drop-in replacement for classinfo. I think classinfo is still there to avoid breaking existing code that uses it.

-Steve

Reply via email to