On 6/19/20 12:38 PM, SealabJaster wrote:
On Friday, 19 June 2020 at 16:31:50 UTC, Paul Backus wrote:
This is a known issue:

https://issues.dlang.org/show_bug.cgi?id=1807

"Reported: 2008"... yikes.

Thanks anyway, glad to know I wasn't just going mad :)

It's somewhat difficult to solve, because reverse-templating is not necessarily one-to-one, or even have any tractible relationship at all.

Consider, for instance:

struct Foo(T) {}

alias Bar(T) = Foo!int;

void takefoo(X)(Bar!X) {}

takefoo(Foo!int());

How does the compiler decide what type T should be? It could be anything.

But this could be special cased for a *direct* alias translation. How to define that is tricky, but should match the pattern:

alias Template1(T) = Template2!(T, and, possibly, other, things)

Where Template2!(T, and, possibly, other, things) can be deduced for Template2 and T using IFTI directly.

As the age of that bug report shows, it's not easy to define or solve.

-Steve

Reply via email to