On Sunday, 14 October 2012 at 07:14:25 UTC, Maxim Fomin wrote:
If this request is approved and compiler has opUnary definition outside type (which suits better then alias
this) such function would hijack alias this.

Free functions cannot and must not ever hijack, i.e. modify existing functionality of a type. Free functions should only be able to add new functionality to a type. This is what currently happens with alias this vs free function which is accessed through UFCS:

struct B
{
    void fun()
    {
        writeln("B.fun()");
    }
}

struct A
{
    B b;
    alias b this;
}

void fun(A a)
{
    writeln(".fun(A)");
}

void main()
{
    A a;
    a.fun(); // prints B.fun() as it should
}

It shouldn't be any different if fun was some operator function, like opUnary; the free function mustn't hijack type A's existing functionality (which is currently being provided to A by that alias this thingy).

Reply via email to