Question about typeof(this)

Don nospam at nospam.com
Tue Sep 7 13:32:46 PDT 2010


Jacob Carlborg wrote:
> On 2010-09-07 17:29, Don wrote:
>> Jacob Carlborg wrote:
>>> I'm reading http://www.digitalmars.com/d/2.0/declaration.html#Typeof
>>> where it says:
>>>
>>> "typeof(this) will generate the type of what this would be in a
>>> non-static member function, even if not in a member function. "
>>>
>>> From that I got the impression that the code below would print the
>>> same result, but it doesn't. It prints:
>>>
>>> main.Bar
>>> main.Foo
>>>
>>> instead of:
>>>
>>> main.Foo
>>> main.Foo
>>>
>>> Is this a bug or have I misunderstood the docs?
>>
>> typeof(this) gives the *compile-time* type of this. Inside Bar, it has
>> to return 'Bar'.
>> typeid(this) gives the *runtime* type of this. So it can work that it's
>> Bar is actually a Foo.
> 
> I know that typeof(this) is a compile time expression but in this case I 
> think the compiler has all the necessary information at compile time. 
> Note that I'm not calling "method" on a base class reference, I'm 
> calling it on the static type "Foo". In this case I think typeof(this) 
> would resolve to the type of the receiver, i.e. the type of"foo".

Even though in this instance it could work out which derived class is 
being used, it's not allowed to use that information while compiling 
method(). There is only ONE function method(), and it has to work for 
Bar, and all classes derived from Bar.


More information about the Digitalmars-d-learn mailing list