alias with lambda syntax: alias fun2=a=>fun(a);
Artur Skawina via Digitalmars-d-learn
digitalmars-d-learn at puremagic.com
Thu Jun 5 03:37:38 PDT 2014
On 06/05/14 08:58, Timothee Cour via Digitalmars-d-learn wrote:
> Is there a way to do this?
>
> auto fun(T)(T a){return a;}
>
> template fun2(T){auto fun2(T a){return fun(a);}}//OK but heavy syntax and cannot be nested inside test()
alias fun2(T) = fun!T;
But this will prevent IFTI, so you'd either need to use 'fun2!int' or
introduce another alias ...
> void main(){
> //alias fun2=fun!int; //OK but needs to specify template params
... like this one.
If you want the params inferred, then
static auto ref fun2(A...)(A a) { return fun(a); }
will mostly work. [1]
> //none of those work:
> //alias fun2=a=>fun(a);
> //alias fun2(T)=(T a)=>fun(a);
> //alias fun2(T)=(T a){return fun(a);}
> auto b=[1].map!fun2;
> assert(b.equal([1]));
> }
>
artur
[1] no perfect forwarding; there's no terse way to do that in D.
More information about the Digitalmars-d-learn
mailing list