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