Thread overview
Multiple template variadic list not working
May 21, 2017
bastien penavayre
May 21, 2017
Stefan Koch
May 21, 2017
bastien penavayre
May 21, 2017
Stanislav Blinov
May 21, 2017
bastien penavayre
May 21, 2017
I've been trying to translate the following idea expressed here in c++:

template <auto... UserArgs, class... Arguments>
void func(Arguments... args) {}

so I tried

void func(UserArgs..., Arguments...)(Arguments args) {}

and then

void func(Args...)(Filter!(isType, Args) args) {}

but nothing works.
This seems like something simple to handle, why is it not then ?
May 21, 2017
On Sunday, 21 May 2017 at 15:13:55 UTC, bastien penavayre wrote:
> I've been trying to translate the following idea expressed here in c++:
>
> template <auto... UserArgs, class... Arguments>
> void func(Arguments... args) {}
>
> so I tried
>
> void func(UserArgs..., Arguments...)(Arguments args) {}
>
> and then
>
> void func(Args...)(Filter!(isType, Args) args) {}
>
> but nothing works.
> This seems like something simple to handle, why is it not then ?

How would that work ?
How would I know where UserArgs end, and Arguments begin ?

May 21, 2017
On Sunday, 21 May 2017 at 15:16:55 UTC, Stefan Koch wrote:
> How would that work ?
> How would I know where UserArgs end, and Arguments begin ?

func!(UserArgs here)(Arguments values here);
C++ does it without any problem.
I don't see what prevent D from doing it.
May 21, 2017
On Sunday, 21 May 2017 at 15:13:55 UTC, bastien penavayre wrote:
> I've been trying to translate the following idea expressed here in c++:
>
> template <auto... UserArgs, class... Arguments>
> void func(Arguments... args) {}
>
> so I tried
>
> void func(UserArgs..., Arguments...)(Arguments args) {}
>
> and then
>
> void func(Args...)(Filter!(isType, Args) args) {}
>
> but nothing works.
> This seems like something simple to handle, why is it not then ?

In this case, eponymous template should do the trick:

template func(UserArgs...) {
    void func(Arguments...)(Arguments args) {}
}
May 21, 2017
On Sunday, 21 May 2017 at 15:30:38 UTC, Stanislav Blinov wrote:
>
> In this case, eponymous template should do the trick:
>
> template func(UserArgs...) {
>     void func(Arguments...)(Arguments args) {}
> }

Ah I see, I didn't know of this technique.
Thanks.