On Friday, 30 March 2018 at 17:10:22 UTC, 9il wrote:
On Friday, 30 March 2018 at 13:56:45 UTC, Stefan Koch wrote:
On Friday, 30 March 2018 at 06:11:22 UTC, 9il wrote:
[1] https://issues.dlang.org/show_bug.cgi?id=16486


Solving this may be possible for special cases but in the general case is infeasible.

Can the case where the name of original template in scope of the alias template refers to an unique template template be implemented? It should be good enough for Mir and Phobos.

// There are unique defs for OriginalTemplate and ParamsMap
import lala : OriginalTemplate, ParamsMap;
alias AliasTemplate(SomeParams...) = OriginalTemplate!(ParamsMap!SomeParams);

Depends greatly on what ParamsMap does. Probably the simplest counterexample:

    alias ParamsMap(T...) = int;

So I have this instance of OriginalTemplate!int - did it come from an AliasTemplate!int? Maybe it was AliasTemplate!string, or AliasTemplate!(1,2,3,MyClass) - there's just no way to know.


Of course, that's an extreme example, but the fundamental requirement is that ParamsMap needs to be injective - each possible output would need to map to exactly one input. Also, this mapping must be possible to reverse-engineer.

If we are to support this, a DIP must be written to explain the algorithm to reverse the mapping. This is absolutely possible for a subset of cases, and would be a benefit in those cases. Of course we also run the risk of creating more confusing corner cases, and an influx of questions in D.learn of people asking 'why does X work, but not Y?'.

--
  Simen

Reply via email to