final uint registerEvent(T, J)(IPlugin, void delegate(J)) { .... } final uint registerEvent(IPlugin, EventHandler, EventInfo, ulong) { .... } There seems to be a problem when having two function with same name but different parameters. Only happend when one of the function use templates. Is that a compiler limitation?