Template Usage with Eponymous Trick

MoonlightSentinel moonlightsentinel at disroot.org
Thu Jan 30 16:16:48 UTC 2020


On Thursday, 30 January 2020 at 15:14:43 UTC, ShadoLight wrote:
> Is there a technical reason for this limitation? Why are the 
> 'classical' invocation style not allowed for eponymous 
> templates as well?
>
> It seems somewhat arbitrary - note that inner/outer functions 
> does not have this limitation - the fllowing is legal and 
> compiles (and does not lead to infinite recursion):

I guess the intention is to e.g. allow UFCS on the return values 
of templated functions without ambiguities, e.g.:

void main()
{
     import std.algorithm, std.stdio;
     int[] values = [ 1, 2, 3, 4 ];

     values.filter!(i => i % 2 == 0)
           .map!(i => i / 2) // Does not refer to any hidden 
member of template filter
           .each!writeln;
}

 From my POV is

void foo(T)() { ... }

just a shorthand notation for

template foo(T)
{
     void foo() {}
}

allthough it could probably use some improvements to the 
documentation.


More information about the Digitalmars-d-learn mailing list