Thread overview
Partially instantiated template as argument to alias parameter.
Nov 04, 2015
Yuxuan Shui
Nov 04, 2015
Yuxuan Shui
Nov 04, 2015
Vladimir Panteleev
Nov 04, 2015
Yuxuan Shui
November 04, 2015
I think this is a reasonable use case:

auto A(R, S)(R a,S b) {return a+b;}

auto B(alias f)(){return f(1, 1.0);}

void main{writeln(B!(A!int)());}
November 04, 2015
On Wednesday, 4 November 2015 at 23:07:42 UTC, Yuxuan Shui wrote:
> I think this is a reasonable use case:
>
> auto A(R, S)(R a,S b) {return a+b;}
>
> auto B(alias f)(){return f(1, 1.0);}
>
> void main{writeln(B!(A!int)());}

For now I have to explicitly write A like this:

template A(R){auto A(S)(R a, S b){...}}
November 04, 2015
On Wednesday, 4 November 2015 at 23:07:42 UTC, Yuxuan Shui wrote:
> I think this is a reasonable use case:
>
> auto A(R, S)(R a,S b) {return a+b;}
>
> auto B(alias f)(){return f(1, 1.0);}
>
> void main{writeln(B!(A!int)());}

Currently this is doable by moving the parameters that are to be explicitly instantiated to an outer template:

template A(R)
{
    auto A(S)(R a,S b) {return a+b;}
}

November 04, 2015
On Wednesday, 4 November 2015 at 23:10:09 UTC, Vladimir Panteleev wrote:
> On Wednesday, 4 November 2015 at 23:07:42 UTC, Yuxuan Shui wrote:
>> I think this is a reasonable use case:
>>
>> auto A(R, S)(R a,S b) {return a+b;}
>>
>> auto B(alias f)(){return f(1, 1.0);}
>>
>> void main{writeln(B!(A!int)());}
>
> Currently this is doable by moving the parameters that are to be explicitly instantiated to an outer template:
>
> template A(R)
> {
>     auto A(S)(R a,S b) {return a+b;}
> }

I'm aware of this, but this is clumsy and limiting.

For example, I can have a template with N parameters, I want to be able to use any partially instantiation of this template as arguments.