<div>Maybe I'm doing something else incorrectly:</div><div><br></div><blockquote class="webkit-indent-blockquote" style="margin: 0 0 0 40px; border: none; padding: 0px;"><div><font class="Apple-style-span" face="'courier new', monospace">class Base</font></div>
<div><font class="Apple-style-span" face="'courier new', monospace">  {</font></div><div><font class="Apple-style-span" face="'courier new', monospace">    public void inBase()</font></div><div><font class="Apple-style-span" face="'courier new', monospace">      {</font></div>
<div><font class="Apple-style-span" face="'courier new', monospace">      }</font></div><div><font class="Apple-style-span" face="'courier new', monospace">  }</font></div><div><font class="Apple-style-span" face="'courier new', monospace"><br>
</font></div><div><font class="Apple-style-span" face="'courier new', monospace">class Bob : Base</font></div><div><font class="Apple-style-span" face="'courier new', monospace">  {</font></div><div><font class="Apple-style-span" face="'courier new', monospace">    public void inBob()</font></div>
<div><font class="Apple-style-span" face="'courier new', monospace">      {</font></div><div><font class="Apple-style-span" face="'courier new', monospace">      }</font></div><div><font class="Apple-style-span" face="'courier new', monospace">  }    </font></div>
<div><font class="Apple-style-span" face="'courier new', monospace">   </font></div></blockquote><div><div> <font class="Apple-style-span" face="'courier new', monospace">   Bob bob = new Bob();</font></div>
<div><font class="Apple-style-span" face="'courier new', monospace">    writeln("Bob as Bob");</font></div><div><font class="Apple-style-span" face="'courier new', monospace">    foreach (i, m; __traits(allMembers, typeof(bob)))</font></div>
<div><font class="Apple-style-span" face="'courier new', monospace">      {</font></div><div><font class="Apple-style-span" face="'courier new', monospace">        writeln("=== i=", i, "  m=", m);</font></div>
<div><font class="Apple-style-span" face="'courier new', monospace">      }</font></div><div><font class="Apple-style-span" face="'courier new', monospace"><br></font></div><div><font class="Apple-style-span" face="'courier new', monospace">    Base base = bob;</font></div>
<div><font class="Apple-style-span" face="'courier new', monospace">    writeln("Bob as Base");</font></div><div><font class="Apple-style-span" face="'courier new', monospace">    foreach (i, m; __traits(allMembers, typeof(base)))</font></div>
<div><font class="Apple-style-span" face="'courier new', monospace">      {</font></div><div><font class="Apple-style-span" face="'courier new', monospace">        writeln("=== i=", i, "  m=", m);</font></div>
<div><font class="Apple-style-span" face="'courier new', monospace">      }</font></div></div><div><br></div><div>The output is:</div><div><br></div><blockquote class="webkit-indent-blockquote" style="margin: 0 0 0 40px; border: none; padding: 0px;">
<div><div><font class="Apple-style-span" face="'courier new', monospace">Bob as Bob</font></div></div><div><div><font class="Apple-style-span" face="'courier new', monospace">=== i=0  m=inBob  </font></div>
</div><div><div><font class="Apple-style-span" face="'courier new', monospace">=== i=1  m=inBase</font></div></div><div><div><font class="Apple-style-span" face="'courier new', monospace">=== i=2  m=toString</font></div>
</div><div><div><font class="Apple-style-span" face="'courier new', monospace">=== i=3  m=toHash</font></div></div><div><div><font class="Apple-style-span" face="'courier new', monospace">=== i=4  m=opCmp</font></div>
</div><div><div><font class="Apple-style-span" face="'courier new', monospace">=== i=5  m=opEquals</font></div></div><div><div><font class="Apple-style-span" face="'courier new', monospace">=== i=6  m=Monitor</font></div>
</div><div><div><font class="Apple-style-span" face="'courier new', monospace">=== i=7  m=factory</font></div></div><div><div><font class="Apple-style-span" face="'courier new', monospace">Bob as Base</font></div>
</div><div><div><font class="Apple-style-span" face="'courier new', monospace">=== i=0  m=inBase     ; missing inBob()</font></div></div><div><div><font class="Apple-style-span" face="'courier new', monospace">=== i=1  m=toString</font></div>
</div><div><div><font class="Apple-style-span" face="'courier new', monospace">=== i=2  m=toHash</font></div></div><div><div><font class="Apple-style-span" face="'courier new', monospace">=== i=3  m=opCmp</font></div>
</div><div><div><font class="Apple-style-span" face="'courier new', monospace">=== i=4  m=opEquals</font></div></div><div><div><font class="Apple-style-span" face="'courier new', monospace">=== i=5  m=Monitor</font></div>
</div><div><div><font class="Apple-style-span" face="'courier new', monospace">=== i=6  m=factory</font></div></div></blockquote><div><br></div><div><br></div><div>If typeof(base) returned Bob as the type, then the two lists of members should be identical. Or am I missing something else?</div>
<div><br></div><div>If I  use derivedMembers instead of allMembers, the output is:</div><div><br></div><blockquote class="webkit-indent-blockquote" style="margin: 0 0 0 40px; border: none; padding: 0px;"><div><div><font class="Apple-style-span" face="'courier new', monospace">Bob as Bob</font></div>
</div><div><div><font class="Apple-style-span" face="'courier new', monospace">=== i=0  m=inBob</font></div></div><div><div><font class="Apple-style-span" face="'courier new', monospace">Bob as Base</font></div>
</div><div><div><font class="Apple-style-span" face="'courier new', monospace">=== i=0  m=inBase</font></div></div></blockquote><div><br></div><div>which still seems to support that typeof() doesn't return the underlying type.</div>
<div><br></div><div>John</div><div><br></div><br><div class="gmail_quote">On Thu, Oct 20, 2011 at 12:25 AM, Jens Mueller <span dir="ltr"><<a href="mailto:jens.k.mueller@gmx.de">jens.k.mueller@gmx.de</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;"><div><div></div><div class="h5">J Arrizza wrote:<br>
> typeof returns the type of the object given to it:<br>
><br>
>     SomeClass sc;<br>
>     typeof(sc)  // returns SomeClass<br>
><br>
>     Object o = sc;<br>
>     typeof(o) // returns Object<br>
><br>
> Is there a way or call to get the underlying type?:<br>
><br>
>     typeof2(o) //returns SomeClass<br>
><br>
> I checked the online doc, but nothing in the Declarations section that I<br>
> could see.<br>
<br>
</div></div>typeid should work.<br>
<a href="http://d-programming-language.org/expression.html#TypeidExpression" target="_blank">http://d-programming-language.org/expression.html#TypeidExpression</a><br>
<font color="#888888"><br>
Jens<br>
</font></blockquote></div><br><br clear="all"><div><br></div>-- <br>John<br>blog: <a href="http://arrizza.blogspot.com/">http://arrizza.blogspot.com/</a><br>web: <a href="http://www.arrizza.com/">http://www.arrizza.com/</a><br>