On Wednesday, 13 June 2018 at 09:41:45 UTC, Luís Marques wrote:

...why can't I generalize it to match U!n, for some U, int n?

    template X(T)
    {
        static if(is(T t == U!n, U, int n))

U needs to be alias U, since S is not a type, but a template. This works:

template X(T)
{
    static if(is(T t == U!n, alias U, int n))
    {
        static if(n == 0)
            alias X = AliasSeq!();
        else
            alias X = U!0;
    }
    else
    {
        static assert(0);
    }
}

class S(int n) { }

pragma(msg, X!(S!3));

Also, you might want to consider the Learn forum for these kinds of questions in the future. :)

--
  Simen

Reply via email to