Is this what you're looking for? struct Foo(T) { static void bar() { writeln("general"); } } struct Foo(T : A[B], A, B) { static void bar() { writeln("special"); } } void main() { Foo!(int).bar(); // general Foo!(int[int]).bar(); // special }