Thread overview
name resolution and static function
Jul 10, 2006
Carlos Santander
Jul 10, 2006
Derek Parnell
Jul 12, 2006
Walter Bright
Sep 14, 2006
Thomas Kuehne
July 10, 2006
I'm sure this also has to do with how name resolution works, but here it is anyway:

//---------------------------------
class A
{
        void foo () {}
        //private
        static void foo (int i) {}
}

class B
{
        void foo (int x)
        {
                A.foo (x);
        }
}
//---------------------------------

I get:
test.d:12: 'this' is required, but test.A is not a base class of B

And if I uncomment the private attribute in A, I get:
test.d:12: 'this' is required, but test.A is not a base class of B
test.d:12: class test.B member foo is not accessible

gdc rev 13 (DMD 0.162)

-- 
Carlos Santander Bernal
July 10, 2006
On Sun, 09 Jul 2006 21:25:27 -0500, Carlos Santander wrote:

> I'm sure this also has to do with how name resolution works, but here it is anyway:
> 
> //---------------------------------
> class A
> {
>          void foo () {}
>          //private
>          static void foo (int i) {}
> }
> 
> class B
> {
>          void foo (int x)
>          {
>                  A.foo (x);
>          }
> }
> //---------------------------------
> 
> I get:
> test.d:12: 'this' is required, but test.A is not a base class of B
> 
> And if I uncomment the private attribute in A, I get:
> test.d:12: 'this' is required, but test.A is not a base class of B
> test.d:12: class test.B member foo is not accessible
> 
> gdc rev 13 (DMD 0.162)

Seems to be a bug. If you place the 'static' one first it compiles fine.
 class A
 {
          // private
          static void foo (int i) {}
          void foo () {}
 }

-- 
Derek
(skype: derek.j.parnell)
Melbourne, Australia
"Down with mediocrity!"
10/07/2006 1:53:10 PM
July 12, 2006
Derek Parnell wrote:
> Seems to be a bug. If you place the 'static' one first it compiles fine.

Yes, it's a bug.
September 14, 2006
Carlos Santander schrieb am 2006-07-10:
> I'm sure this also has to do with how name resolution works, but here it is anyway:
>
> //---------------------------------
> class A
> {
>          void foo () {}
>          //private
>          static void foo (int i) {}
> }
>
> class B
> {
>          void foo (int x)
>          {
>                  A.foo (x);
>          }
> }
> //---------------------------------
>
> I get:
> test.d:12: 'this' is required, but test.A is not a base class of B
>
> And if I uncomment the private attribute in A, I get:
> test.d:12: 'this' is required, but test.A is not a base class of B
> test.d:12: class test.B member foo is not accessible
>
> gdc rev 13 (DMD 0.162)

Added to DStress as http://dstress.kuehne.cn/run/s/static_37_A.d http://dstress.kuehne.cn/run/s/static_37_B.d http://dstress.kuehne.cn/run/s/static_37_C.d http://dstress.kuehne.cn/run/s/static_37_D.d http://dstress.kuehne.cn/run/s/static_37_E.d http://dstress.kuehne.cn/run/s/static_37_F.d http://dstress.kuehne.cn/run/s/static_37_G.d http://dstress.kuehne.cn/run/s/static_37_H.d http://dstress.kuehne.cn/run/s/static_37_I.d http://dstress.kuehne.cn/run/s/static_37_J.d http://dstress.kuehne.cn/run/s/static_37_K.d

Thomas