Re: aliases and templates

2009-01-23 Thread ws
Trass3r Wrote:

> I already read about "Implicit Template Properties":
> If a template has exactly one member in it, and the name of that member 
> is the same as the template name, that member is assumed to be referred 
> to in a template instantiation
> 
> I guess the following is something similar, but why are aliases used here?
> 
> template ParameterTypeTuple(dg)
> {
>  static if (is(dg P == function))
>   alias P ParameterTypeTuple;
>  else static if (is(dg P == delegate))
>   alias ParameterTypeTuple!(P) ParameterTypeTuple;
>  else static if (is(dg P == P*))
>   alias ParameterTypeTuple!(P) ParameterTypeTuple;
>  else
>   static assert(0, "argument has no parameters");
> }


Without the alias you will be declaring a variable.
With it you are aliasing a type.


Re: aliases and templates

2009-01-22 Thread Jarrett Billingsley
On Thu, Jan 22, 2009 at 10:56 AM, Trass3r  wrote:
> I already read about "Implicit Template Properties":
> If a template has exactly one member in it, and the name of that member is
> the same as the template name, that member is assumed to be referred to in a
> template instantiation
>
> I guess the following is something similar, but why are aliases used here?
>
> template ParameterTypeTuple(dg)
> {
>static if (is(dg P == function))
>alias P ParameterTypeTuple;
>else static if (is(dg P == delegate))
>alias ParameterTypeTuple!(P) ParameterTypeTuple;
>else static if (is(dg P == P*))
>alias ParameterTypeTuple!(P) ParameterTypeTuple;
>else
>static assert(0, "argument has no parameters");
> }
>

Aliases are members too.


aliases and templates

2009-01-22 Thread Trass3r

I already read about "Implicit Template Properties":
If a template has exactly one member in it, and the name of that member 
is the same as the template name, that member is assumed to be referred 
to in a template instantiation


I guess the following is something similar, but why are aliases used here?

template ParameterTypeTuple(dg)
{
static if (is(dg P == function))
alias P ParameterTypeTuple;
else static if (is(dg P == delegate))
alias ParameterTypeTuple!(P) ParameterTypeTuple;
else static if (is(dg P == P*))
alias ParameterTypeTuple!(P) ParameterTypeTuple;
else
static assert(0, "argument has no parameters");
}