On 11/6/12, Simen Kjaeraas <simen.kja...@gmail.com> wrote: > In addition to Dan's answer, let me present a general solution: > > template InstantiationInfo( T ) { > static if ( is( T t == U!V, alias U, V... ) ) { > alias U Template; > alias V Parameters; > } else { > static assert(false, T.stringof ~ " is not a template type > instantiation."); > } > }
I think Kenji fixed this recently because it didn't work several releases ago. You can now do cool things with template constraints. For example if you want to limit a template to only allow types that are instances of a specific template you can do: struct Foo(T...) { } struct Bar(T) if (is(T x == Foo!X, X...)) // T must be a Foo instance { } struct Other(T...) { } void main() { alias Bar!(Foo!int) A; // ok alias Bar!(Other!int) B; // fail }