I think the following example is legitimate code that should work:

struct S1 {
    void foo() {
        writeln("S1.foo()");
    }
    void foo(ulong x) {
        writefln("S1.foo(%d)", x);
    }
}

struct S2 {
    S1 s;
    alias s this;

    void foo(string str) {
        writeln("S2.foo(%s)", str);
    }
}

void main() {
    S2 s;

    s.foo("hahaha");
s.foo(100); // XXX this doesn't compile, since there's no S2.foo that accepts an int
}


To quote Andrei, if it looks like it should work, it should. (Also something about turtles).

My original code did something a bit different, just to show another example of why this behavior looks fundamentally broken to me:

struct S2 {
    S1 s;
    alias s this;
@disable void foo(ulong); // calling foo(ulong) doesn't make sense in the context of S2
}

Now, calling S2.foo() won't compile, since S2 only knows one prototype for foo which accepts a ulong.

Reply via email to