I think I would go with the function that accepts both types, trying to use broadcasting inside. Maybe the function that does not check tau and can be broadcasted can be useful, if tau is checked somewhere else before. Something like:
julia> function _f(z,tau)
z + tau
end
_f (generic function with 1 method)
julia> function f(z, tau)
@assert tau > 0
_f.(z,tau)
end
f (generic function with 1 method)
julia> f(1,3)
4
julia> f([1,2],3)
2-element Vector{Int64}:
4
5
julia> _f.(1,2)
3
julia> _f.([1,2],2)
2-element Vector{Int64}:
3
4