Variadic grouping

Artur Skawina art.08.09 at gmail.com
Mon Jul 29 13:43:33 PDT 2013


On 07/29/13 17:24, bearophile wrote:
> Maybe there is a way to allow that too:
> 
> 
> template Select(bool condition, T...) if (T.length == 2) {
>     static if (condition)
>         enum Select = T[0];
>     else
>         enum Select = T[1];
> }
> 
> void main() {
>     enum x = Select!(true, 10, 20);// error
>     static assert(x == 10);
>     int a = 1;
>     int b = 2;
>     alias y = Select!(true, a, b);
>     assert(y == 1);
>     alias T = Select!(true, int, long);
>     static assert(is(T == int));
> }
> 
> 
> How do you tell apart values from not values? :-)

   template Select(bool condition, T...) if (T.length == 2) {
       static if (__traits(compiles, function { alias _1 = T[0]; alias _2 = T[1]; }))
          alias Select = T[!condition];
       else
          enum Select = T[!condition];
   }

artur


More information about the Digitalmars-d mailing list