On Sat, 01 Oct 2011 12:34:50 -0400, Jacob Carlborg <[email protected]> wrote:

Have a look at the following code:

class Foo
{
     static Foo instance_;

     static Foo instance ()
     {
         if (instance_)
             return instance_;

         return instance_ = new Foo;
     }

     static auto opDispatch (string name, Args...) (Args args)
     {
         mixin("return instance." ~ name ~ "(args);");
     }

     void bar () {}
}

void main ()
{
     Foo.bar;
}

Compiling the above code results in:

Error: need 'this' to access member bar

Is it possible somehow to make the above code compile?

It's an issue with namespace polution. Both instances and the type share the same namespace. It's really a bad limitation IMO. I have a bug report that helps try and separate it: http://d.puremagic.com/issues/show_bug.cgi?id=6579

It should work if you use a different class as the singleton:

class Foo2
{
   void bar () {}
}

class Foo
{
      static Foo2 instance_;

      static Foo2 instance ()
      {
          if (instance_)
              return instance_;

          return instance_ = new Foo;
      }

      static auto opDispatch (string name, Args...) (Args args)
      {
          mixin("return instance." ~ name ~ "(args);");
      }

}

-Steve

Reply via email to