Better substitution of template types (ie. match Foo<TData> and not just Foo<T>)