PackedAliasSeq?

deadalnix deadalnix at gmail.com
Sat Feb 24 06:14:52 UTC 2018


On Thursday, 22 February 2018 at 19:26:54 UTC, Andrei 
Alexandrescu wrote:
> After coding https://github.com/dlang/phobos/pull/6192 with 
> AliasSeq, the experience has been quite pleasurable. However, 
> in places the AliasSeq tends to expand too eagerly, leading to 
> a need to "keep it together" e.g. when you need to pass two of 
> those to a template.
>
> I worked around the issue by nesting templates like this:
>
> template Merge(T...)
> {
>     template With(U...)
>     {
>         static if (T.length == 0)
>             alias With = U;
>         else static if (U.length == 0)
>             alias With = T;
>         else static if (T[0] < U[0]
>                  || T[0] == U[0] && T[1].stringof <= 
> U[1].stringof)
>             alias With =
>                 AliasSeq!(T[0], T[1], Merge!(T[2 .. $]).With!U);
>        else
>             alias With =
>                 AliasSeq!(U[0], U[1], Merge!T.With!(U[2 .. $]));
>     }
> }
>
> So instead of the unworkable Merge!(AliasSeq!(...), 
> AliasSeq!(...)), one would write 
> Merge!(AliasSeq!(...)).With!(AliasSeq!(...)).
>
> The problem remains for other use cases, so I was thinking of 
> adding to std.meta this simple artifact:
>
> template PackedAliasSeq!(T...)
> {
>     alias expand = AliasSeq!T;
> }
>
> That way, everything stays together and can be expanded on 
> demand.
>
>
> Andrei

Isn't a packed AliasSeq just a tuple ?


More information about the Digitalmars-d mailing list