No, struct Foo(T) { static void f() { writeln("general"); } } struct Foo(T : A(B).alias C, A, B, C) { static void f() { writeln("special"); } } struct Bar(T) { struct Baz {} } struct Baz(T : A(B), A, B) { } void main() { Foo!(Bar!(int).Baz); Baz!(Bar!(int)); }