I am trying to use `iszero`

for a custom struct. I defined `zero`

for it, which appeared to be the necessary method. But `iszero`

does not work, and the error message is not clear, because it complains that the `zero`

function (just defined) does not exist.

```
julia> struct S
x::Int
end
julia> Base.zero(::Type{S}) = S(0)
julia> zero(S)
S(0)
julia> x = S(0)
S(0)
julia> iszero(x)
ERROR: MethodError: no method matching zero(::S)
Closest candidates are:
zero(::Union{Type{P}, P}) where P<:Dates.Period at /buildworker/worker/package_linux64/build/usr/share/julia/stdlib/v1.6/Dates/src/periods.jl:53
zero(::LinearAlgebra.UniformScaling{T}) where T at /buildworker/worker/package_linux64/build/usr/share/julia/stdlib/v1.6/LinearAlgebra/src/uniformscaling.jl:136
zero(::SparseArrays.AbstractSparseArray) at /buildworker/worker/package_linux64/build/usr/share/julia/stdlib/v1.6/SparseArrays/src/SparseArrays.jl:55
...
Stacktrace:
[1] iszero(x::S)
@ Base ./number.jl:40
[2] top-level scope
@ REPL[12]:1
julia>
```

If I define

```
Base.zero(x::S) = S(0)
```

the problem is solved. However, this seems redundant with the definition of `Base.zero(::Type{S})`

, since (I guess) there could be a

```
Base.zero(x::T) where T = Base.zero(T)
```

in fact I am surprised that this is not already implemented (and curious for the reason).