On Tue, 25 Jan 2011 10:44:23 -0500, Trass3r <u...@known.com> wrote:

Why do they exist

It tells you the exact type of this at the call site. For const struct functions, this will tell you what the actual constness of the variable is. For classes, this may give you the derived or base class or interface so you can do more if you want. For example, you could return the derived type for chaining.

and why does typeof(this) strip constness?

That seems like a bug, but actually, I'd not trust typeid. typeid is actually a runtime-defined TypeInfo class, which you are calling toString on, which is not telling you exactly what the compiler thinks is the type. Try this instead:

typeof(this).stringof

which is the type the compiler uses. This might still return the wrong type. I seem to remember typeof(this) is handled specially, so you can use it inside static functions. You might try this:

auto x = this;
writeln(typeof(x).stringof);

I would still say it's a bug, it's very surprising that inside a const member function, typeof(this) does not assume the const attribute.

-Steve

Reply via email to