use impl_template::impl_template; trait GenericFoo { fn my_fn(arg1: T, arg2: S) -> Self; } struct Bar; struct Baz; struct One; struct Two; struct Three; struct Alpha; struct Beta; #[impl_template] impl GenericFoo<((Bar, Baz)), ((Alpha, Beta))> for ((One, Two, Three)) { fn my_fn(_arg1: __TYPE0__, _arg2: __TYPE1__) -> __TYPE2__ { unimplemented!() } } fn main() { assert_impls_foo::(); assert_impls_foo::(); assert_impls_foo::(); assert_impls_foo::(); assert_impls_foo::(); assert_impls_foo::(); assert_impls_foo::(); assert_impls_foo::(); assert_impls_foo::(); assert_impls_foo::(); assert_impls_foo::(); assert_impls_foo::(); } fn assert_impls_foo, T, S>() {}