does alias this work correctly?

Zhenya zheny at list.ru
Mon Jan 14 21:24:48 PST 2013


On Tuesday, 15 January 2013 at 00:04:15 UTC, Jonathan M Davis 
wrote:
> 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
:( If compiler tried alias this before opDispatch all would be OK.
Maybe I'm going to give up.
Thank you for comprehensive explanation.


More information about the Digitalmars-d-learn mailing list