On Friday, 6 March 2020 at 11:51:54 UTC, wjoe wrote:
I don't understand this error message. Which type can't be resolved?

I.... don't know. It works if you rename the inner one but it doesn't like eponymous templates like this. I suspect either the spec subtly doesn't allow it or a compiler bug. I think the type it is referring to is the `this` type.

You can work around with an alias:

// test rig
import std.stdio;
struct A {
template opDispatch(string name) {
     auto opDispatch(T, Args...)(Args args) {
           writeln(name, ".", T.stringof, "(", args, ")");
     }
 }
}

// workaround
void main() {
        A a;
        alias helper = a.opDispatch!("foo");
        a.helper!(int)(5, "omg");
}


So the helper does one level, then the next level is done on the next line to avoid the stupid "multiple ! not allowed". You need to specify the `a` again to avoid `need this for...` due to how aliases are kinda weird.

Huge hassle to use but if just doing it temporarily to debug it can be livable.

Is there a way to look at output of what the compiler generates for f.whatever!SomeResource(...); ?

-vcg-ast or something like to dmd but i never use it since there's TONS of spam in a file called `yourfile.d.cg`

Reply via email to