No subclass member loopup in derived class, bug?

Ali Çehreli acehreli at yahoo.com
Tue Mar 26 17:24:20 PDT 2013


On 03/26/2013 04:58 PM, Henning Pohl wrote:
 > struct S {
 > int value() {
 > return 1;
 > }
 > }
 >
 > class Base {
 > S s;
 > alias s this;
 > }
 >
 > class Derived : Base {
 > void func() {
 > int i = value();
 > }
 > }
 >
 > Fails with "main.d(14): Error: undefined identifier value".
 > Explicitly casting this to Base works:
 >
 > void func() {
 > int i = (cast(Base)this).value();
 > }
 >
 > Is this intended or a bug?

Since alias this is for implicit conversions, it should be effective 
only when Base is used as an S. It is not obvious in the previous code 
that the programmer really wanted that.

I like the current behavior. I wonder what others think.

Also, this works as well:

         int i = super.value();

Ali



More information about the Digitalmars-d-learn mailing list