On Monday, January 14, 2013 17:57:03 Zhenya wrote:
> import std.stdio;
> 
> struct Bar
> {
>       void opDispatch(string op)()
>               if(op == "bar")
>               {
>                       if(this !is m_init)
>                               writeln("non-static");
>                       else
>                               writeln("maybe static");
>               }
>       static @property Bar m_init()
>       {
>               return Bar.init;
>       }
>       alias m_init this;
> }
> 
> void main()
> {
>       Bar b;
>       Bar.bar();
>       readln;
> }
> 
> If I understood you correctly, it must be compiled since there
> isn't some 'bar' that is going to be used, right?
> But it doesn't compile.

I honestly have no idea how opDispatch and alias this are supposed to 
interact. They're both used as fallbacks when the type doesn't directly define 
a function. That being said The reason that your code doesn't work here is the 
fact that you'r ecalling bar is if it were a static function, but your 
opDispatch isn't static. opDispatch would have to be static for it to be used 
as a static function (it can't be both static and non-static), and in that 
case, the if condition that you have in it wouldn't compile.

- Jonathan M Davis

Reply via email to