Thanks for the comment! I noticed this wouldn't compile, though I haven't really wondered why so. My email was more about the compiler bug than about using alias this with singletons.
Anyway, while trying to circumvent the compiler bug, I did this: import std.stdio; class SImpl { void foo() { writeln("foo!"); } private this() { } } class S { static @property SImpl instance() { if (_i is null) _i = new SImpl(); return _i; } static SImpl _i; alias instance this; } void main() { S.foo(); } This works and compiles with DMD 2.062. (I don't like to have to write this additional code manually, but I'll try to make something about it :-) ) LMB On Thu, May 9, 2013 at 7:04 AM, Jacob Carlborg <d...@me.com> wrote: > On 2013-05-09 11:48, Jacob Carlborg wrote: > >> This won't work. You need to be able to overload on static, which you >> can't. I've tried this with opDispatch. > > > To elaborate. Below is your original with the "foo" method added. > > > class S > { > static @property S instance() > { > if (_i is null) // #1 > _i = new S(); > > return _i; > } > > static S _i; > > alias instance this; // #2 > > void foo () {} > } > > If you try to call it like this: S.foo(), the compiler will complain that > "foo" need access to "this". The "alias this" won't kick in. > > -- > /Jacob Carlborg