Something simpler is enough for my purposes, to tell that a type is one 
instantiation of Foo or not:


struct Foo(T...) {}
struct Bar(T...) {}

template IsFoo(S) {
    // ?
}

void main() {
    alias Foo!(int,int,int) S1;
    alias Foo!(float,int,int,int) S2;
    alias Bar!(float,int,int,int) S3;

    static assert(IsFoo!S1);
    static assert(IsFoo!S2);
    static assert(!IsFoo!S3);
}

Bye,
bearophile

Reply via email to