Thread overview
expand variadic template parameters
Mar 10, 2015
André
Mar 10, 2015
ketmar
Mar 10, 2015
Adam D. Ruppe
Mar 10, 2015
André
Mar 10, 2015
Meta
March 10, 2015
Hi,

in this minified example I try to expand the variadic parmaters of
foo to bar:

import std.typecons;

void foo(T ...)(T args)
{
     bar(args.expand);
}

void bar(int i, string s){}

void main()
{
	foo(1, "a");
}

I got the syntax error: no property 'expand' for type '(int,
string)'
I understand args is a TypeTuple and therefore expand is not
working.
Is there a simple way to get it working?

Kind regards
André
March 10, 2015
On Tue, 10 Mar 2015 19:11:21 +0000, André wrote:

> Hi,
> 
> in this minified example I try to expand the variadic parmaters of foo to bar:
> 
> import std.typecons;
> 
> void foo(T ...)(T args)
> {
>       bar(args.expand);
> }
> 
> void bar(int i, string s){}
> 
> void main()
> {
> 	foo(1, "a");
> }
> 
> I got the syntax error: no property 'expand' for type '(int, string)' I understand args is a TypeTuple and therefore expand is not working. Is there a simple way to get it working?

sure. just remove `.expand`. ;-)

  void foo(T...) (T args) {
    bar(args);
  }


March 10, 2015
On Tuesday, 10 March 2015 at 19:11:22 UTC, André wrote:
> Is there a simple way to get it working?

The simplest: just write `bar(args);` - the variadic arguments will automatically expand.
March 10, 2015
too many trees in front of my eyes.
Thanks for the answers.

Kind regards
André

On Tuesday, 10 March 2015 at 19:16:23 UTC, Adam D. Ruppe wrote:
> On Tuesday, 10 March 2015 at 19:11:22 UTC, André wrote:
>> Is there a simple way to get it working?
>
> The simplest: just write `bar(args);` - the variadic arguments will automatically expand.
March 10, 2015
On Tuesday, 10 March 2015 at 19:11:22 UTC, André wrote:
> Hi,
>
> in this minified example I try to expand the variadic parmaters of
> foo to bar:
>
> import std.typecons;
>
> void foo(T ...)(T args)
> {
>      bar(args.expand);
> }
>
> void bar(int i, string s){}
>
> void main()
> {
> 	foo(1, "a");
> }
>
> I got the syntax error: no property 'expand' for type '(int,
> string)'
> I understand args is a TypeTuple and therefore expand is not
> working.
> Is there a simple way to get it working?
>
> Kind regards
> André

Just to be clear, TypeTuple is a library construct defined in std.typetuple. It doesn't have a .expand member as far as I know. You're probably thinking of tuple.expand.

The type of `T ...` is not TypeTuple, but an internal tuple type used by the compiler. TypeTuple is just some syntactic sugar allowing you to create one of these compiler tuples.