On Mon, 28 Feb 2011 08:22:58 -0500, spir <denis.s...@gmail.com> wrote:

Hello,

I have a template condition that looks like this:

     T check (T) () if (
             is(T == DLogical) ||
             is(T == DNumber) ||
             is(T == DText) ||
             is(T == DList) ||
             is(T == DUnit)
         ) {
         ...
     }

Is there a way to "factor out" such an expression using a kind of type set? If only for cleaning the code; but also because such a set may get long.

     T check (T) () if (is (T in validTypeSet)) {
         ...
     }

This should probably work:

template isOneOf(X, T...)
{
    static if(!T.length)
       enum bool isOneOf = false;
    else static if(is(X == T[0]))
       enum bool isOneOf = true;
    else
       enum bool isOneOf = isOneOf!(X, T[1..$]);
}

T check(T) () if(isOneOf!(T, DLogical, DNumber, DText, TList, DUnit))
{
   ...
}

Not sure if this exists in std.traits or not, but that's where I'd look.

-Steve

Reply via email to