does alias this work correctly?

Zhenya zheny at list.ru
Sun Jan 13 11:41:48 PST 2013


On Sunday, 13 January 2013 at 19:35:08 UTC, Maxim Fomin wrote:
> On Sunday, 13 January 2013 at 19:16:36 UTC, Zhenya wrote:
>> Hi!
>> Is it all right with it:
>> struct Foo
>> {
>> 	struct Bar
>> 	{
>> 		void opCall()
>> 		{
>> 			writeln("non-static");
>> 		}
>> 	}
>> 	Bar bar;
>> 	static struct Anotherbar
>> 	{
>> 		static void bar()
>> 		{
>> 			writeln("static");
>> 		}
>> 	}
>> 	alias Anotherbar this;
>> }
>>
>> void main()
>> {
>> 	Foo f;
>> 	f.bar();
>> 	Foo.bar();//fils with message:type Bar is not an expression
>>        Foo.Bar b;
>>        b();//this works however
>> }
>> ?
>
> According to spec http://dlang.org/class.html#AliasThis 
> undefined lookups are forwarded to AliasThis member. But in 
> your case Foo struct has bar member, so no further resolution 
> is performed. Rename the member and the code compiles.
>
> Note, this seems to come from neighbor thread 
> http://forum.dlang.org/thread/uelmpwwckcveimpbdtdo@forum.dlang.org. 
> I think it is simpler to rename functions than create bunch of 
> structs just to be able to have eponymous non-static and static 
> functions.
I just want very much avoid renaming function,it's principle for 
me.
So I would like to know is my sample right or no.


More information about the Digitalmars-d-learn mailing list