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/uelmpwwckcveimpbd...@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.

Reply via email to