class Bang(T) { void fn(U)( Bang!(U) ot) {} void fn(int q) {} } Why do the two member functions conflict here? One takes a class instance and a type, the other takes an int. If this is intended, and it's not possible to overload a function with a template function, then maybe it should be?